アンマネージドvc++コードで処理されているマネージドvb.netコードからイベントを発生させています。以下はコード行です:
Dim pCALMarkups as Object
RaiseEvent RequestEISData(nOrdinal, pCALMarkups, eMarkupCreateSecurity, eMarkupModifySecurity, eMarkupDeleteSecurity, sUserNameSecurity)
pCALMarkupsオブジェクトは参照として渡され、アンマネージ vc++ コードで初期化されます。以下は、VB.NET でのイベントの宣言です。
Public Event RequestEISData(ByVal nOrdinal As Short, <[In](), [Out]()> <MarshalAs(UnmanagedType.IDispatch)> ByRef pCALMarkups As Object, ByRef eMarkupCreateSecurity As Short, ByRef eMarkupModifySecurity As Short, ByRef eMarkupDeleteSecurity As Short, ByRef sUserNameSecurity As String)
以下は、 VC++でこのイベントを処理している関数です。
void __stdcall OnRequestEISDataViewer(short nOrdinal,
IDispatch **pMarkups,
short *eMarkupCreateSecurity,
short *eMarkupModifySecurity,
short *eMarkupDeleteSecurity,
BSTR *sUserNameSecurity)
{ CCALPageMarkups* pCalMarkups = new CComObject <CCALPageMarkups>;
// CCALPageMarkups is a class declared in vc++ code
// Some code for initializing pCalMarkups
*pMarkups = pCalMarkups; //last line of code in this function
}
コードのデバッグ中にOnRequestEISDataViewer関数にステップインできます。その関数内のすべてがエラーなしで実行されていますが、最後の行を実行した後に制御が関数から出てくると、以下のエラーが表示されます。
「マネージド デバッグ アシスタント 'InvalidVariant' は 'D:\Shared Folder\Workman code\UI\bin\WorkMan.exe' で問題を検出しました。追加情報: アンマネージド バリアントからマネージド オブジェクトへの変換中に、無効なバリアントが検出されました。無効な VARIANT を CLR に渡すと、予期しない例外、破損、またはデータ損失が発生する可能性があります"
では、 VB.NETコードでpCALMarupsオブジェクトをストロング タイプまたはマーシャリングして、このエラーを解決するにはどうすればよいでしょうか。または vc++ コードを変更する必要がありますか? どんな提案でも大歓迎です。