web-dev-qa-db-ja.com

VS C ++のようにC#DLLから関数をエクスポートできますか?

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

C#dllでこれを達成するにはどうすればよいですか?上記のコードに相当するC#コードはありますか?

編集:詳細

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

27
Mike Webb

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

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

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

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

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

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

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

30
hB0

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

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

19
Ben Voigt

はい、C++と同じ方法でC#dllから関数をエクスポートできます。このプロセスを容易にするアドイン nmanaged Exports(DllExport for .Net) 、または C#/ VB.NETの関数をネイティブコード

C#をエクスポートするコードDLL to Metatrader Build 600 + を参照してください) (Metatrader)C++と非常によく似ています。

さらに、 Native and .NET Interopability がおもしろいかもしれませんが、ほとんどの場合、.NET内からネイティブコードにアクセスすることを目的としており、他の方法ではありません。

8
Patrick White

いいえ、CやC++で行うのと同じ意味ではできません。

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

これらの記事をご覧ください

2
Nawaz