18

node.jsの.netdllを利用したい。それは、「clr hosting」を使用して、これらのdllをc /c++で使用できるようにする必要があることを意味します。

残念ながら、 githubでnodejsネイティブの.Net拡張機能を作成する例は少しがっかりしました。最後のステップまでスクロールしてください。

[共通言語ランタイムサポート]オプションを[共通言語ランタイムサポートなし]に変更します

そして、あなたは私が何を意味するか知っています。その記事を正義にするための修正:ファイルに対してのみSharpAddon.cppそのオプションを「共通言語ランタイムサポートなし」に変更することをお勧めします。そのため、追加する他の.cppファイルではCLRサポートが有効になります(CLRプロジェクトのデフォルト)。実際には、他の.cppファイルの.netdllを使用できます。

この質問は、実際にはNode.js / serversidejavascriptでの.NETDLLの使用の複製です。これは、ノードのネイティブWindowsポートすら存在しなかったときに作成されたため、時代が変わった可能性がありますが、googleはそれを疑っています。 。

4

3 に答える 3

13

更新:node-gypは、binding.gypファイルが正しくセットアップされると、以下の手動手順を自動的に実行できます。この簡略化された手順については、この回答を参照してください。


かなり簡単であることがわかりました。CLRホスティングに苦労し、しばらくの間ホストにデータを出し入れした後、ノード拡張に対して/ clrを実際に有効にできることがわかりました(これまでのところ)。方法は次のとおりです。

  • http://nodejs.org/api/addons.htmlの指示に従って、プロジェクトファイルを生成します
  • 生成された.slnをVisualStudioで開き(私はVS 2010を使用しています)、プロジェクト設定で/clrを有効にします
  • 今ではおそらくビルドされないので、-この場合は実際には非常に役立ちます-エラーメッセージが/clrと競合するフラグに誘導する必要があります

それを機能させるために私が変更しなければならなかったフラグ:

  • / EHscを無効にする(C ++例外)
  • /RTC1と/RTCsuを無効にする
  • リリース:/MTを/MDに変更
  • デバッグ:/MTdを/MDdに変更します
  • リリース:/GR-を/GRに変更

次に、.net dllを参照して、このようなマネージコードとアンマネージコードを混在させることができます。

#pragma managed

#using <managed.dll>

void callManaged()
{
    managed::Class1^ c1 = gcnew managed::Class1();
    System::String^ result = c1->Echo("hola");
    System::Console::WriteLine("It works: " + result);
}

#pragma unmanaged

Handle<Value> Method(const Arguments& args) {
  HandleScope scope;
  callManaged();
  return scope.Close(String::New("world"));
}

更新簡単なハウツーでこのリンクを発見しました: http://joseoncode.com/2012/04/10/writing-your-first-native-module-for-node-dot-js-on-windows/

于 2012-07-09T04:21:05.200 に答える
6

edge.js が iisnode の作成者からの新しい回答のようです。

Edge.jsは、ネイティブの node.js 拡張機能を記述する代わりに、C# と .NET の使用をサポートします

于 2013-04-01T05:09:14.007 に答える