16,472
社区成员
发帖
与我相关
我的任务
分享
typedef VARIANT (__cdecl CallInFunc)(DISPPARAMS *);
virtual /* [local] */ HRESULT STDMETHODCALLTYPE Invoke(
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS *pDispParams,
/* [out] */ VARIANT *pVarResult,
/* [out] */ EXCEPINFO *pExcepInfo,
/* [out] */ UINT *puArgErr){
if(dispIdMember!=0){
TCHAR printbuf[80];
wsprintf(printbuf,_T("错误码: %u\r\n 错误:%u"),dispIdMember,ddsaddr);
::MessageBox(NULL, printbuf , _T("错误信息") ,MB_OK | MB_ICONSTOP);
CallInFunc* pFun = (CallInFunc*)ddsaddr;//函数地址,都没错,我调试错
DISPPARAMS disp;
*pVarResult = pFun(&disp);
}
return S_OK;
}
typedef VARIANT (__cdecl CallInFunc)(DISPPARAMS *);
extern "C" __declspec(dllexport) VARIANT __cdecl excaddr(int* addr)
{
CallInFunc* pFun = (CallInFunc*)addr;
//return
DISPPARAMS disp;
return pFun(&disp);
}
typedef VARIANT (__cdecl excaddr)(int *);
void CBankNoticeDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
HINSTANCE hInstance= LoadLibrary("dll.dll");
excaddr* proc =(excaddr*) GetProcAddress(hInstance,"excaddr");
VARIANT v = proc((int*)CallInFunc);
CString str;
str.Format("%d",v.intVal);
AfxMessageBox(str);
}