ActiveX添加测试工程, 出现的问题[非选择性参数][找不到成员]
ActiveX 添加测试工程
1.新建工程MFC application,
2.添加完毕,在main Dialog中, 右键[Insert Activex Control],选择你的ActiveX控件。
3.选中你刚刚添加的控件,然后右键[add variable]
m_ocx就是控件的instance object,点击[完成],可以看到在XXXDlg.h中会添加这个instance object的定义。
ipcamerctrl1.h
ipcamerctrl1.cpp
{
InvokeHelper(0x1, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
}
//==============================
接下来是关键了, 有时候,我们自己修改控件中的interface,
但是*.h *.cpp *.odl(vs2010是*.idl) 中interface没有匹配,比如*.h 中 修改了,funcA(int, int); 而*.odl 为funcA(int), 就容易造成错误。一般也无法编译。
但是除了interface不匹配,还有其他的问题, 就是上文所说的生成 ipcamerctrl1.h 的问题
*.odl
*.cpp
// Dispatch map
BEGIN_DISPATCH_MAP(CIPCamVideoCtrl, COleControl)
END_DISPATCH_MAP()
*.h
public:
enum {
//{{AFX_DISP_ID(CIPCamVideoCtrl)
dispidFuncA = 1L,
dispidFuncB = 2L,
.............
}
这里不得不说经常修改控件的时候,容易遗漏,但是当时编译器没有报错,怎么办呢?
出错情况
非常折磨人。 如何规避这种情况呢?
答案就是
改完之后,定义的形参 会多出一个选项 dispid,
添加这个dispid后,外部测试工程中接口用的就是enum的值
如果有删除修改的错误,编译时也会及时报出来
http://bbs.csdn.net/topics/310061638
里面应该不是 AboutBox()的问题,而是某个dispid 顺序出现错误。
所以我锁定问题的时候,才会想起尝试 确定dispid值。来排除[非选择性参数]的问题。(一切都是自己尝试出来的)
另说明一下,vs2010 通过添加接口,已经全部用 DISP_FUNCTION_ID 格式,
写下这个只是给自己mark一下,顺便BS下MS,出现这种错误,没有文档,很难找原因。
===============
另vc6.0创建的ActiveX控件, 通过vs2010 添加测试工程,[Insert Activex Control]后, vs2010 Crash T_T
(但是我VS2010创建的ActiveX控件,用VS2010 添加测试工程则没有问题)
VS2005则正常,时间原因暂且不管,可能也因为VC6.0、VS2010里面各种设置导致的。
有人知道,可以告诉我下原因
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)