4

マネージド コード (C# で記述) を使用する C++/CLI DLL があります。純粋な C 関数を DLL からエクスポートしたいと考えています。これは、 and を使用してアンマネージ コードから呼び出されLoadLibraryますGetProcAddress

エクスポートされた関数では、インスタンスを作成し、C# クラスの 1 つのメソッドを呼び出すだけです。だから私はこれを試しました:

extern "C" __declspec( dllexport ) int __stdcall DoWork(
       const wchar_t* Param1,
       int Param2,
       void* Param3)
{
    WorkerNamespace::ManagedClass1 worker;
    return worker.DoWork( gcnew String(Param1), Param2, IntPtr( Param3 ) );
}

正常にコンパイルされますが、実行するとdumpbin CompiledDll.dll /exports、エクスポートされた関数はありません。

関数宣言の前に追加しようとしまし#pragma unmanagedたが、本体内でマネージド型を使用するとエラーが発生します。

関数の本体を空のスタブ ( のみreturn 1;) とに置き換えても#pragma unmanaged、関数はまだに表示されませんdumpbin。それで、私は何を間違っていますか?C++/CLI クラス ライブラリ プロジェクトから C 関数をエクスポートするにはどうすればよいですか?

4

1 に答える 1

6

構成の問題だったに違いありません。Empty projectテンプレートを使用して新しいプロジェクトを作成し、変更しました

Configuration TypeDynamic Library (.dll)

Common Language Runtime SupportCommon Language Runtime Support (/clr)

System.Core一般的な構成で、私のC#アセンブリへの参照を追加し、Common Properties今では動作します。

また、名前マングリングを処理する .DEF ファイルも追加しました (もちろん、def ファイルの名前は で設定する必要がありますLinker -> Input -> Module Definition file)。

LIBRARY
EXPORTS
DoWork

それが他の誰かを助けることを願っています。

于 2012-10-11T11:00:36.903 に答える