2

C# アプリケーションで ATL COM DLL メソッドを使用するのを手伝ってください

ATLLib.idl で

...
interface IATLLibMain : IUnknown{
    [helpstring("method hello")] HRESULT hello([out,retval] BSTR* res);
};
...

ATLLibMain.cpp (ATLSimpleObjectクラス)内

STDMETHODIMP CATLLibMain::hello(BSTR* res)
{
    *res = SysAllocString(L"Hello world!!!");
    return S_OK;
}

COMをコンパイルして登録しました。C# プロジェクトで、ATLLib.dll への参照を追加し、このような呼び出しメソッドを試行

IATLLibMain atllib = new ATLLibMainClass();
Console.WriteLine(atllib.hello());

そしてVSはエラーを出します

タイプの未処理の例外がSystem.Runtime.InteropServices.COMExceptionATLLibTest.exe で発生しました。

次のエラー 80040154 が原因で、CLSID {...} を持つコンポーネントの COM クラス ファクトリを取得できませんでした。

オンライン

IATLLibMain atllib = new ATLLibMainClass();

C# アプリケーションで ATL DLL を使用するプロジェクト サンプルを表示するか、このエラーの修正に役立ててください。ありがとう...

4

1 に答える 1

2

C# コードが 64 ビット モードで実行されているようです。32 ビットのアンマネージ コードを読み込めません。

C# アプリケーションのプラットフォーム ターゲットをAny CPUからx86に変更します。

また、 regsvr32 の 32 ビット バージョンを使用してライブラリを登録します(「64 ビット Windows で Regsvr32.exe を実行するとエラー メッセージが表示される」を参照)。

%windir%\SysWoW64\regsvr32.exe C:\path\to\library.dll
于 2013-03-03T11:50:55.163 に答える