2016-07-29 11 views
0

Я хочу создать внутреннее расширение узла, используя dll, содержащую код C++ и C# в Visual Studio 2015. Я не могу заставить его работать после my own instructions прошлых лет, который основан на последних node-gyp ,Как использовать смешанную C++ и .Net dll в node.js? (Ошибка: abort() был вызван)

Если вы не используете опцию /clr, я могу просто запустить программу, как показано ниже.

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

При включении /clr только первый вызов для входа запускается на выполнение. При компиляции DLL в режиме отладки, я получаю следующее сообщение:

enter image description here

Как исправить/отладить это?

(я знаю, что есть край, но я стараюсь идти узел-Gyp путь)

ответ

0

После неудачной вертел все (?) Компилятора и компоновщика варианты в VS2015, я узнал, как настроить мой binding.gyp вместо того, чтобы получить .Net работать:

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

Я проверил сборку, успешно выполнив следующую комбинацию управляемых и неуправляемых код:

#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) 

}