纯粹属于探讨,有兴趣者请进。
假设有一个工程pro1,这个工程里面有一个类CMyClass,然后pro1调用了一个名为MyDll.dll的库。现在,我又想以pro1为基础写另一个工程,实现另一个功能。新的工程名为pro2,这个新的工程因为要适用于新的情况,所以把CMyClass里面的一个int型变量m_nV改成了一个vector<int>类型的变量m_vecV.这样,问题来了,pro2也会调用MyDll.dll,这个动态链接库在操作CMyClass类的m_nV时就出现了问题,因为现在这个变量是一个完全不同类型的m_vecV了。
基于这个问题,特讨教解决办法。
至于这个问题的实际意义,经常使用VC的朋友们应该非常清楚了。
假设有一个工程pro1,这个工程里面有一个类CMyClass,然后pro1调用了一个名为MyDll.dll的库。现在,我又想以pro1为基础写另一个工程,实现另一个功能。新的工程名为pro2,这个新的工程因为要适用于新的情况,所以把CMyClass里面的一个int型变量m_nV改成了一个vector<int>类型的变量m_vecV.这样,问题来了,pro2也会调用MyDll.dll,这个动态链接库在操作CMyClass类的m_nV时就出现了问题,因为现在这个变量是一个完全不同类型的m_vecV了。
基于这个问题,特讨教解决办法。
至于这个问题的实际意义,经常使用VC的朋友们应该非常清楚了。
如果 int 编程 double 还可以用模板 这2个类型不是一个级别的 不行
重新写一个DLL当然可以解决。可是你想过没有,新的DLL和现在的DLL所有的操作都是一样的,就因为一个变量差异就重写,将来又有新的要求,难道又新写一个DLL吗?就是再写,工作量也大,而且容易引入低级错误。我有个想法,就是用一个命令,如pragma,但没有想到好的解决办法。
如果DLL设计的时候就没有考虑过适应不同的变量类型的话,那么就没办法了,这个属于设计缺陷,不是靠coding可以解决的问题。ps:你这个具体情况,可否考虑循环,对vector的每一个元素调用一次dll中的函数?
不能那么简单的用循环。
把问题转化为如下形式:int i;
if(i == 1)
{
//按m_nV为int型的方式编译;
}
else
{
//按m_nV为vector<int>类型的方式编译
}
而不是具体工程中。
也就是说,CMyClass应该放在DLL中,然后对外开放不同的属性,分别针对Pro1和Pro2
来调用。而不是DLL去调用Pro1或者Pro2的代码。
一个是int一个是int数组要么dll中增加一个接口
要么改变你调用的方式