39

VS C / C ++では、を使用できますextern "C" __declspec(dllexport) -function declaration-

C#dllでこれを実現するにはどうすればよいですか?上記のコードと同等のC#コードはありますか?

編集:詳細

Notepad ++のアドインを作成しようとしていて、C#を使用したいのですが、これまでに見た一般的な方法は、上記の呼び出しでレガシーC ++コードを使用して、Notepad++がインポートすると想定するいくつかの関数をエクスポートすることです。電話。C#を使用したサンプルアプリがありますが、これにはローダーDLLが必要です。これは、以下のコメント/回答からC#の唯一の方法であると思います。

4

4 に答える 4

37

アンマネージドエクスポート=> https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports

DLLExport => https://github.com/3F/DllExport

それはどのように機能しますか?

新しいクラスライブラリを作成するか、既存のクラスライブラリを続行します。次に、UnmanagedExportsNugetパッケージを追加します。

これは、必要なほとんどすべてのセットアップです。

これで、あらゆる種類の静的メソッドを記述し、それを装飾して[DllExport]、ネイティブコードから使用することができます。
DllImportと同じように機能するため、。を使用してパラメーター/結果のマーシャリングをカスタマイズできますMarshalAsAttribute

コンパイル中に、私のタスクは必要なエクスポートを追加するためにILを変更します...

于 2012-08-01T09:53:24.883 に答える
20

私は以前にこれを行う人を見たことがありますが、ildasm、MSIL.exportディレクティブの追加、そして再組み立てが必要でした。 名前の付いたプログラムdll_toolは、これらの手順を実行できます。

ネイティブエクスポートとマネージエクスポートの両方を使用して混合モードDLLを構築する場合は、この目的のために特別に設計されたC ++/CLIを使用する必要があります。

于 2011-01-27T16:24:09.640 に答える
9

はい、C ++とほぼ同じ方法でC#dllから関数をエクスポートすることができます。このプロセスを容易にするアドインのアンマネージエクスポート(DllExport for .Net) 、またはC#/VB.NETの関数をネイティブコードにエクスポートするなどの同様の方法から少し助けが必要です。

C ++と非常に類似しているレガシーアプリケーション(Metatrader)にC#dllをエクスポートするためのRobert Gieseckeのアンマネージエクスポート用のC#プロジェクトテンプレートを使用した実際の例については、C#DLLをMetatraderBuild600+にエクスポートするコードを参照してください。

さらに、ネイティブと.NETの相互運用性は興味深いと思うかもしれませんが、ほとんどの場合、その逆ではなく、.NET内からネイティブコードにアクセスすることを目的としています。

于 2014-05-12T20:10:31.360 に答える
3

いいえ、CやC++の場合と同じ意味でそれを行うことはできません。

ただし、COM APIを作成してそれを実現し、CおよびC++コードで使用することができます。

これらの記事を参照してください

于 2011-01-27T16:20:08.173 に答える