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

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条)

报告相同问题?

悬赏问题

  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId
  • ¥15 delphi7 HMAC_SHA256方式加密
  • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
  • ¥15 下列c语言代码为何输出了多余的空格