Activex控件 win32调用GetIDsOfNames 返回未知名称(0x8002006)

mngluer 2016-03-23 04:42:09
给了一个ocx控件,要想com一样调用ocx控件。就参照 http://blog.csdn.net/zj510/article/details/39494873 文章里的方式调用,
但是GetIDsOfNames 返回未知名称。

1.Activex 控件是自己照网上写的,添加一个方法 Long AddFunc(Long x, Long y);

#include "stdafx.h"
#include <objbase.h>
#include <atlcomcli.h>
#include <Debug/myocx.tlh>

#import "D:\\workspace\\MyOcx\\Release\\MyOcx,ocx" \
no_namespace no_smart_pointers raw_interfaces_only\
raw_native_types no_implementation named_guids

int _tmain(int argc, _TCHAR *argv[])
{
HRESULT hr;
hr = CoInitialize(0);
if(SUCCEEDED(hr))
{
_DMyOcx *pitd = NULL;
hr = CoCreateInstance(CLSID_MyOcx, 0, CLSCTX_ALL, DIID__DMyOcx, reinterpret_cast<void **>(&pitd) );
if(SUCCEEDED(hr))
{
DISPID dispid[3] = {0};
BSTR Para[3] = {0};
Para[0] = L"AddFunc";
Para[1] = L"x";
Para[2] = L"y";
hr = pitd->GetIDsOfNames(IID_NULL, Para, 3, LOCALE_SYSTEM_DEFAULT, dispid);
...............
...............
}
}

CoUninitialize();
return 0;
}

有几个问题请教各位大虾:
1.Activex 可以像com这样调用吗?(网上资料 Activex 实现了com的设计)
2.如果可以,是哪里写错了。




...全文
267 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-03-24
  • 打赏
  • 举报
回复
可能需要加消息循环。
mngluer 2016-03-24
  • 打赏
  • 举报
回复
1.决解了,替换DeBUG版本的oxc就能返回正确。但是在替换会Release的ocx版本,也行 2.在调用invoke时返回 E_UNEXPECTED错误,要在ocx里的Ctrl类继承 IsInvokeAllowed 方法,直接 rturn TRUE: 谢谢各位的帮助。
向立天 2016-03-24
  • 打赏
  • 举报
回复
引用 2 楼 mngluer 的回复:
[quote=引用 1 楼 xianglitian 的回复:] Activex就是com 但是你是在控制台里访问的?
对啊,不可以吗,或者是什么方式访问?[/quote]还真没在控制台里操作了 一般都是在win32环境
mngluer 2016-03-23
  • 打赏
  • 举报
回复
引用 1 楼 xianglitian 的回复:
Activex就是com 但是你是在控制台里访问的?
对啊,不可以吗,或者是什么方式访问?
向立天 2016-03-23
  • 打赏
  • 举报
回复
Activex就是com 但是你是在控制台里访问的?

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧