VS2010下MFC对话框中插入ActiveX控件时无法创建窗口问题(winocc.cpp line:329/325)

项目需要用VS2010写了两个ActiveX控件,但是集成到主软件(主软件用VS2015编写)中时一直报错winocc.cpp(line:(VS2010)329/(VS2015)325),软件中一共四个activeX控件,只有我的两个控件相互冲突,

然后自己用VS2010写了一个MFC对话框测试控件,发现这两个控件不能同时创建,只创建其中一个、或者把其中一个创建几次都没有问题,唯独在两个控件同时创建的时候报错:

这段代码在VS2010中是这样:

我的测试代码如下:

调试发现,第一次(106行)调用Create()函数时,会进入到winocc.cpp的329行,也就是ShowWindow函数中,但是在第二次(113行)调用的时候却不会进这个函数,进而因为没有创建成功窗口而在114行的ShowWindow处出错(断点调试发现进入ShowWindow时m_pCtrlSite指针是空的,正常情况下应该有值),百思不得其解。

找了好久没找到为什么不进入这个Create()函数,迫不得已重建一遍代码工程,发现在前面几步(没加算法之前)的过程中程序都是完好的(能够同时运行),但是一旦加入算法模块的dll就出错,后来将算法模块代码清空,再尝试,还是错误。

这个时候,机制的我突然想到,清空了Algorithm工程,仍然报错,那说明不是算法模块的错误,接下来我把算法模块卸载掉,再次运行,还是报错,这个时候我明白了,不是activeX控件中某个模块的问题,是整个代码存在问题,

因为我的两个activeX控件所用的工程名都是一样的,除了启动项的不同以外!

猜想是因为MFC在加载控件时调用我的动态链接库,却发现有两个名字一样的dll?怎么办?那第一次调用完第二次就不调用了,进而导致了第二次不进入create()函数的结果,因为我的一共6个dll中,有一对dll是完全一样的,而另外两对中的代码不完全相同,可能在这时候调用dll时发生了(what i call)二义性的问题?

可能就是由于动态链接库同名造成的,然后我修改了一个控件中项目的名称,发现可以同时插入我的两个activeX控件,且软件运行正常!问题解决!

以后再也不写同样名称的代码了!

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页