【解決方法】C# 4.0 で初期化できない VC++ に組み込まれた COM クラス

プログラミングQA


やあ、

C# を使用して .net フレームワークで COM Dll にアクセスしようとしていますが、COM クラスのオブジェクトを初期化できません。必要なすべての dll は VC++ で正常にビルドされていますが、C# でアクセスしているときに、次のようなエラーがスローされます。

「次のエラーのため、CLSID {4F3843A4-048B-11D4-93D8-0050BAD440B8} のコンポーネントの COM クラス ファクトリを取得できませんでした: 800401f0.」

Google からも何の助けも得られません。 よろしく。

感謝と敬意
クシュ・シャルマ

解決策 1

こんにちは、

エラー コード (800401f0) は、CoInitialize または CoCreateInstance エラーを示しているようです。これは、COM DLL が正しく登録されていないことに関連している可能性があります。

DLL でオプション “-r” を指定して “rgsvc” を実行してから、C# アプリを実行してください。

解決策 2

ありがとうフレッド。 Regsvr32 または grsvc を確認し、登録方法の例をいくつか教えてください。 これについてあなたの助けに本当に感謝します。

解決策 3

ありがとうフレッド。

試してみましたが、dll が読み込まれたためエラーが発生しましたが、エントリ ポイント DllInstall が見つかりませんでした。

有効なdllまたはOCXファイルであることを確認してください。このCOM dllをビルドし、エラーなしでVC ++プロジェクトをビルドしました。

今すぐ助けてください。

解決策 4

その場合、あなたの問題はそこから生じています。
DLL に DLLInstall エントリ ポイントがない場合 (必須ではありません)、C# アプリケーションから直接参照することはできません。
C# アプリケーションから COM DLL とやり取りするには、P/Invoke メカニズムを使用する必要があります。

C#
[System.Runtime.InteropServices.DllImport("yourComLib.dll")]
static extern void SomeMethod(....);

使用する COM メソッドごとに、C# アプリケーションで外部静的メソッドを定義する必要があります。 ただし、COM DLL を参照できるようにする場合は、DLLInstall および DLLUninstall メソッドがあることを確認する必要があります。

解決策 5

ありがとう、フレッド

しかし、これ以上処理できないので、いくつかの例で説明していただけますか。

以下は私のDLLです

[System.Runtime.InteropServices.DllImport(“ExactaUtil.dll”)]

現在、私はこのように使用しています:

保護された EXACTAUTILLib.IUtilObj m_objUtil;

// Util クラスのインスタンスを作成します。
m_objUtil = 新しい EXACTAUTILLib.UtilObjClass();

コメント

タイトルとURLをコピーしました