OCX添加对外属性结果外部调用全部错位,求助!~~

难题 2014-07-23 05:16:59
这是我原来的对外属性和接口

properties:
[id(1)] BSTR a;
[id(2)] BSTR b;
[id(3)] BSTR c;
[id(4)] BSTR d;
[id(5)] BSTR e;
methods:
[id(6)] long aa();
[id(7)] long bb();
[id(8)] long cc();
[id(9)] long dd();

现在我在中间插入了一个属性变成

properties:
[id(1)] BSTR a;
[id(2)] BSTR b;
[id(3)] BSTR c;
[id(4)] BSTR d;
[id(5)] BSTR e;
[id(6)] BSTR f;
methods:
[id(7)] long aa();
[id(8)] long bb();
[id(9)] long cc();
[id(10)] long dd();

结果我在外部调用bb,变成调用aa,这要这样解决?
...全文
89 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
难题 2014-07-24
  • 打赏
  • 举报
回复
解决了,原来只要在CTRL的CPP文件中的BEGIN_DISPATCH_MAP下面那个DISP_PROPERTY_NOTIFY函数改为DISP_PROPERTY_NOTIFY_ID函数,中间加上dispid就解决了 VC6自动添加到是DISP_PROPERTY_NOTIFY函数 非常感谢go_and_see的回复
边走边瞧 2014-07-24
  • 打赏
  • 举报
回复
引用 5 楼 u013823973 的回复:
[quote=引用 4 楼 go_and_see 的回复:] 不要手工修改IDL文件,除非你对它非常熟悉,你的问题在于手工修改了ID号。向导自动生成的应该是这样:

		properties:
			[id(1), helpstring("property a")] BSTR a;
			[id(2), helpstring("property b")] BSTR b;
			[id(3), helpstring("property c")] BSTR c;
			[id(4), helpstring("property d")] BSTR d;
			[id(5), helpstring("property e")] BSTR e;
			[id(10) , helpstring("property f")] BSTR f;
	methods:

			[id(DISPID_ABOUTBOX)] void AboutBox();
			[id(6), helpstring("method aa")] LONG aa(void);
			[id(7), helpstring("method bb")] LONG bb(void);
			[id(8), helpstring("method cc")] LONG cc(void);
			[id(9), helpstring("method dd")] LONG dd(void);
不是,我用的VC6,用MFC自动添加的,自动添加就是上面那样的[/quote] 那你在其他工程使用这个activeX的时候,有没有重新导入.h和.cpp文件?
难题 2014-07-23
  • 打赏
  • 举报
回复
引用 4 楼 go_and_see 的回复:
不要手工修改IDL文件,除非你对它非常熟悉,你的问题在于手工修改了ID号。向导自动生成的应该是这样:

		properties:
			[id(1), helpstring("property a")] BSTR a;
			[id(2), helpstring("property b")] BSTR b;
			[id(3), helpstring("property c")] BSTR c;
			[id(4), helpstring("property d")] BSTR d;
			[id(5), helpstring("property e")] BSTR e;
			[id(10) , helpstring("property f")] BSTR f;
	methods:

			[id(DISPID_ABOUTBOX)] void AboutBox();
			[id(6), helpstring("method aa")] LONG aa(void);
			[id(7), helpstring("method bb")] LONG bb(void);
			[id(8), helpstring("method cc")] LONG cc(void);
			[id(9), helpstring("method dd")] LONG dd(void);
不是,我用的VC6,用MFC自动添加的,自动添加就是上面那样的
边走边瞧 2014-07-23
  • 打赏
  • 举报
回复
不要手工修改IDL文件,除非你对它非常熟悉,你的问题在于手工修改了ID号。向导自动生成的应该是这样:

		properties:
			[id(1), helpstring("property a")] BSTR a;
			[id(2), helpstring("property b")] BSTR b;
			[id(3), helpstring("property c")] BSTR c;
			[id(4), helpstring("property d")] BSTR d;
			[id(5), helpstring("property e")] BSTR e;
			[id(10) , helpstring("property f")] BSTR f;
	methods:

			[id(DISPID_ABOUTBOX)] void AboutBox();
			[id(6), helpstring("method aa")] LONG aa(void);
			[id(7), helpstring("method bb")] LONG bb(void);
			[id(8), helpstring("method cc")] LONG cc(void);
			[id(9), helpstring("method dd")] LONG dd(void);
边走边瞧 2014-07-23
  • 打赏
  • 举报
回复
引用 2 楼 u013823973 的回复:
[quote=引用 1 楼 go_and_see 的回复:] 重新编译工程并注册ocx,如果还是同样的结果,那就把工程删除重新建。
清除,在重新组建,也没用啊[/quote] 稍等,写个测试看看。
难题 2014-07-23
  • 打赏
  • 举报
回复
引用 1 楼 go_and_see 的回复:
重新编译工程并注册ocx,如果还是同样的结果,那就把工程删除重新建。
清除,在重新组建,也没用啊
边走边瞧 2014-07-23
  • 打赏
  • 举报
回复
重新编译工程并注册ocx,如果还是同样的结果,那就把工程删除重新建。

3,245

社区成员

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

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