我用C ++编写了一个COM ATL DLL,Visual Studio 2012。 到目前为止一切正常。
在这个DLL中,我需要从.tlb调用一个函数。
此功能在.tlh文件中定义如下:
virtual HRESULT __stdcall SetRawDataCB (
/*[in]*/ long address,
/*[in]*/ long userData,
/*[out,retval]*/ enum ApiError * pRetVal ) = 0;
在我的DLL中,我称之为:
_pIEtApi->SetRawDataCB((long)(__int64)(&myRawDataCB),(long)this,&result);
if( result != ApiError_NoError)
return -3;
现在当我在C#中测试我的COM DLL时,C#崩溃并告诉我:
对PInvoke函数的调用“ETApi!Alea.Api.RawDataDelegate :: Invoke导致堆栈不平衡。 最可能的是,托管PInvoke签名与未管理的目标签名不匹配。 您应该检查调用约定和PInvoke签名的参数是否与未管理的目标签名匹配。
使用此功能时,我做错了吗?
谢谢!