私はC++で記述した関数をインポートし、DLLにコンパイルしてC#アプリケーションにコンパイルする必要があります。すべてがエラーや警告なしでビルドされますが、コードをステップ実行するとDLLへの最初の関数呼び出しでException
がスローされ、「DLL 'WMIQuery.dll'に「CreateScanEngine」という名前のエントリポイントが見つかりません」というメッセージが表示されます。ので、私のC#アプリケーションのように宣言されています:C#アプリケーションでアンマネージDLLから関数をインポートする
internal static class WMIQuery
{
[DllImport("WMIQuery.dll", CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)]
internal static extern void CreateScanEngine();
}
依存関係ウォーカーは、以下のようなDLLであっ機能を示しています
依存関係ウォーカーはまた、DLLのためにこれらのエラー/警告示しOrdinal: 1(0x0001)
Hint: 0(0x0000)
Function ^: void CreateScanEngine(void)
Entry Point: 0x00001860
:
をError: At least one required implicit or forwarded dependency was not found.
Warning: At least one delay-load dependency module was not found.
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.
違いがありますか?また、私はC#プロジェクトへの参照としてDLLを追加しようとした、と私はこのエラーを得た:
A reference to [my DLL] could not be added. Please make sure that the file is accessible, and that it is a valid assembly or COM component.
誰も私が間違ってやっている知っていますか?ありがとう。
依存関係ウォーカーは、名前の符号化をオフにするオプションがあります。そのオプションのツールバーアイコンにはC++が書かれています。 – Dialecticus
あなたが示唆したように、 'extern" C "'を追加してマングリングを削除しようとしましたが、今はコンパイラの警告が出ています: 'Warning C4297: 'CreateScanEngine':関数は例外をスローしないと仮定します。この関数はextern "C"であり、/ EHcが指定されています。 "/ EHcとは何ですか?この警告をクリアする正しい方法は何でしょうか?ありがとう。 –
ニースの警告。エクスポートする関数に例外を投げてはいけません。その例外を捕まえる者は誰もいません。管理されたコードは、まともな情報が含まれていないためトラブルシューティング方法がわからないという例外メッセージが表示されます。これを無視して、プロジェクト+プロパティ、C/C++、コード生成、C++例外を有効にする=/EHaをコンパイルする必要がある場合。 –