yangbo50304
2015-04-22 02:25
采纳率: 100%
浏览 1.6k
已采纳

ocx的调用问题,总是弹出com_error

大家好!
我用vs2012做了一个ocx的测试,也调用regsvr32注册成功了,CocreateInstance也成功了,但是一调用接口就出现了_com_error,e.Description()返回时NULL,e.ErrorMessage()返回的是"灾难性错误"。我编译使用的x64。以下是idl的代码和cpp的部分实现

LONG CTestMFCOCXCtrlCtrl::TestFunc(LONG lParam)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

// TODO: 在此添加调度处理程序代码

return lParam + 100;
}

namespace TestMFCOCXCtrlLib {

_COM_SMARTPTR_TYPEDEF(_DTestMFCOCXCtrl, __uuidof(_DTestMFCOCXCtrl));
_COM_SMARTPTR_TYPEDEF(_DTestMFCOCXCtrlEvents, __uuidof(_DTestMFCOCXCtrlEvents));

//
// Type library items
//

struct __declspec(uuid("1b86a820-67e0-400d-b742-012cd6923d21"))
_DTestMFCOCXCtrl : IDispatch
{
//
// Wrapper methods for error-handling
//

// Methods:
long TestFunc (
    long lParam );

};

struct __declspec(uuid("38117874-e540-42bb-9485-79a1a8a63f63"))
_DTestMFCOCXCtrlEvents : IDispatch
{};

struct __declspec(uuid("92eb1c84-343e-428a-8a70-5e67b1b94100"))
TestMFCOCXCtrl;
// [ default ] dispinterface _DTestMFCOCXCtrl
// [ default, source ] dispinterface _DTestMFCOCXCtrlEvents

//
// Wrapper method implementations
//

#include "c:\users\xxx\desktop\test\testcallocx\x64\debug\testmfcocxctrl.tli"

} // namespace TestMFCOCXCtrlLib

以下是用console窗口程序调用的代码
#import "..\x64\Debug\TestMFCOCXCtrl.ocx"
#include "x64\Debug\testmfcocxctrl.tlh"
using namespace TestMFCOCXCtrlLib;

int tmain(int argc, _TCHAR* argv[])
{
CoInitialize(NULL);
{
_DTestMFCOCXCtrl* pActiveObj = NULL;
HRESULT hr = CoCreateInstance(
_uuidof(TestMFCOCXCtrl), NULL, CLSCTX_ALL, __uuidof(_DTestMFCOCXCtrl), (void**)&pActiveObj);
if (SUCCEEDED(hr))
{
try
{
hr = pActiveObj->TestFunc(123);
}
catch (_com_error& e)
{
const wchar_t* pDes = e.Description();
const wchar_t* pMsg = e.ErrorMessage();
wprintf(L"create instance fail message = %s!\r\n%s\r\n", pDes, pMsg);
}

pActiveObj->Release();
}
else
{
printf("create instance fail!\r\n");
}
}
CoUninitialize();
system("pause");
return 0;
}

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

4条回答 默认 最新

  • yangbo50304 2015-05-27 02:05
    最佳回答

    结贴吧,没有实质的内容

    已采纳该答案
    评论
    解决 无用
    打赏 举报
查看更多回答(3条)

相关推荐 更多相似问题