C#使堆栈失衡(使用.tlb)

时间:2014-02-19 22:19:23

标签: c# c++ dll

我用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签名的参数是否与未管理的目标签名匹配。

使用此功能时,我做错了吗?

谢谢!

0 个答案:

没有答案