2011-12-05 41 views
0

私はC++でCOM dllを開発しました。今私はCOM dllによって公開されたインターフェイスのいくつかを使用するMFCクライアントを持っています。このアプリケーションからCoCreateInstanceを呼び出すと、次のエラーで失敗します。80020008 DISP_E_BADVARTYPE。私はidlファイルに新しいインタフェースと新しいメソッドを追加しました。私は構造体(UUID付き)をidlファイルに定義した構造体を渡したいと思います。今私は私の方法でSAFEARRAYとして渡しています。私はこのエラーを理解するのを手伝ってください。Cocreateinstanceエラー

+0

CoCreateInstance()はそのエラーコードを返すことができません。あなたの質問はそれを説明しようとするのではなく、ポストコードを意味をなさない。 –

答えて

0

DISP_E_BADVARTYPEは、COM interopマーシャリングエラーです。 (あなたのクライアントはCLRサポートでコンパイルされていますか?)つまり、サポートされていないタイプのマーシャリングはできません。つまり、CLRに準拠していないタイプでも、オートメーションと互換性がないタイプでもありません。

この問題の一つの原因(64ビット整数は、オートメーション互換性がありません。)、このようなCOMデュアルインターフェイスにCLR長整数を渡すなどの不一致整数型、ある

別の原因は、あなたの構造タイプであるかもしれません。ユーザー定義型のSafeArraysはオートメーションと互換性があります(VT_ARRAY | VT_RECORD)ので、やりたいことができると思います。しかし、あなたのUDTには互換性のないものがあるかもしれません。 VT_SAFEARRAYやVT_USERDEFINEDのように間違って指定したことがあります。

IDLを投稿できますか?

関連する問題