1

Win32 DLL にエクスポートされるネイティブ C++ クラスがあります。

class __declspec(dllexport) Manager { ... }

DLL が正常に作成されました。と呼びましょうUnmanaged.dll

このクラスを .Net アプリケーションで使用したいと考えています。したがって、マネージ C++ ラッパー クラスを作成することにしました。そこでUnmanaged.dll、リンカーへの入力として設定する新しい CLR クラス ライブラリを作成しました。

マネージ dll をコンパイルすると、次のエラーが発生します。

致命的なエラー LNK1107: 無効または破損したファイル: 0x318 で読み取ることができません。(プロジェクト ManagedBridge の Unmanaged.dll)

どちらのプロジェクトも x64 にコンパイルするように設定されています。DLL エクスポート ビューアーには、クラスのコンストラクターとメソッドが表示されます。したがって、DLLは問題ないようです。

足りないものはありますか?

4

1 に答える 1

2

DLLをリンカに渡すことはできません。リンカはそれをどう処理するかわかりません。一般に、DLLは、呼び出した関数がDLLに含まれていることをリンカが判断するのに役立ちません。DLLからのエクスポートには、いくつかの名前を付けることができます。数字(「通常」)であることが問題であり、リンカは数字を識別子名にマップする方法を知りません。また、名前も一致する必要はありません。名前は通常、名前の装飾を削除して簡略化されています。

代わりに、DLLのインポートライブラリについてリンカに通知する必要があります。これには、序数から名前へのマッピングや、コンパイラーが使用した元の装飾された名前など、より多くの情報が含まれています。インポートライブラリは、DLLをリンクしたときに作成された.libです。DLLプロジェクトのビルドディレクトリにあります。そのパスをリンカの[追加の依存関係]設定に追加します。

于 2013-01-13T14:21:33.037 に答える