2016-07-29 27 views
0

Ich möchte eine native Knotenerweiterung mit einer DLL erstellen, die C++ und C# -Code in Visual Studio 2015 enthält. Ich kann es nicht nach my own instructions von gestern, die auf der neuesten node-gyp basiert .Wie verwenden Sie gemischte C++ - und .NET-DLLs in node.js? (Fehler: abort() wurde aufgerufen)

Wenn ich die Option /clr nicht verwende, kann ich ein Programm wie das folgende einfach ausführen.

console.log("1"); 
const addon = require('./build/Release/addon'); 
console.log("2"); 

Wenn /clr ermöglicht, nur der erste Aufruf ausgeführt wird loggt sein. Wenn die DLL in den Debug-Modus kompilieren, erhalte ich die folgende Meldung:

enter image description here

Wie diese/debug zu beheben?

(Ich weiß, es Rand, aber ich versuche, den Knoten-gyp Weg zu gehen) in VS2015

Antwort

0

Nach dem vergeblichen twiddling alle (?) Den Compiler und Linker-Optionen, fand ich, wie man aus meiner binding.gyp einrichten stattdessen zu erhalten, um .Net zu arbeiten:

{ 
    "targets": [ 
    { 
     "target_name": "addon", 
     "sources": [ "hello.cc" ], 
     "msbuild_settings": { 
     "ClCompile": { 
      "CompileAsManaged": "true", 
      "ExceptionHandling": "Async", 
     }, 
     }, 
    } 
    ] 
} 

ich überprüfte den Build, indem sie erfolgreich die folgende Mischung aus verwalteten und nicht verwalteten Code ausführen:

#include <node.h> 
#include <v8.h> 

namespace demo { 

    #pragma managed 

    void callManaged() 
    { 
    System::String^ result = gcnew System::String("hola"); 
    System::Console::WriteLine("It works: " + result); 
    } 

    #pragma unmanaged 

    using v8::FunctionCallbackInfo; 
    using v8::Isolate; 
    using v8::Local; 
    using v8::Object; 
    using v8::String; 
    using v8::Value; 

    void Method(const FunctionCallbackInfo<Value>& args) { 
    Isolate* isolate = args.GetIsolate(); 
    callManaged(); 
    args.GetReturnValue().Set(String::NewFromUtf8(isolate, "woooooorld")); 
    } 

    void init(Local<Object> exports) { 
    NODE_SET_METHOD(exports, "hello", Method); 
    } 

    NODE_MODULE(addon, init) 

}