VS C/C++では、extern "C" __declspec(dllexport) -function declaration-
を使用できます。
C#dllでこれを達成するにはどうすればよいですか?上記のコードに相当するC#コードはありますか?
編集:詳細
私はNotepad ++のアドインを作成しようとしていますが、C#を使用したいのですが、これまで見てきた一般的な方法は、上記の呼び出しでレガシーC++コードを使用して、Notepad ++がインポートする予定の関数のいくつかをエクスポートすることですコール。 C#を使用したサンプルアプリがありますが、これにはまだローダーDLLが必要です。これは、以下のコメント/回答からC#の唯一の方法であると想定しています。
アンマネージドエクスポート=> https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports
DLLExport=> https://github.com/3F/DllExport
どのように機能しますか?
新しいクラスライブラリを作成するか、既存のクラスライブラリを使用して続行します。次に、UnmanagedExports Nugetパッケージ を追加します。
これはほとんど必要なセットアップです。
これで、あらゆる種類の静的メソッドを記述し、
[DllExport]
で装飾し、ネイティブコードから使用できます。
DllImportと同様に機能するため、MarshalAsAttribute
を使用してパラメーター/結果のマーシャリングをカスタマイズできます。コンパイル中、私のタスクはILを変更して必要なエクスポートを追加します...
以前にこれを行う人を見たことがありますが、ildasmが必要で、MSIL .export
ディレクティブを追加してから再組み立てします。 dll_tool
という名前のプログラム は、これらの手順を実行できます。
ネイティブエクスポートとマネージエクスポートの両方で混合モードDLLを作成する場合は、この目的のために特別に設計されたC++/CLIを使用する必要があります。
はい、C++と同じ方法でC#dllから関数をエクスポートできます。このプロセスを容易にするアドイン nmanaged Exports(DllExport for .Net) 、または C#/ VB.NETの関数をネイティブコード 。
C#をエクスポートするコードDLL to Metatrader Build 600 + を参照してください) (Metatrader)C++と非常によく似ています。
さらに、 Native and .NET Interopability がおもしろいかもしれませんが、ほとんどの場合、.NET内からネイティブコードにアクセスすることを目的としており、他の方法ではありません。
いいえ、CやC++で行うのと同じ意味ではできません。
ただし、COM APIを作成して、CおよびC++コードで使用できるようにすることができます。
これらの記事をご覧ください