纯粹属于探讨,有兴趣者请进。
假设有一个工程pro1,这个工程里面有一个类CMyClass,然后pro1调用了一个名为MyDll.dll的库。现在,我又想以pro1为基础写另一个工程,实现另一个功能。新的工程名为pro2,这个新的工程因为要适用于新的情况,所以把CMyClass里面的一个int型变量m_nV改成了一个vector<int>类型的变量m_vecV.这样,问题来了,pro2也会调用MyDll.dll,这个动态链接库在操作CMyClass类的m_nV时就出现了问题,因为现在这个变量是一个完全不同类型的m_vecV了。
基于这个问题,特讨教解决办法。
至于这个问题的实际意义,经常使用VC的朋友们应该非常清楚了。

解决方案 »

  1.   

    vector <int>   是一堆 int  这样2个类型也可以用相同的操作吗?不可能的
    如果 int 编程 double 还可以用模板 这2个类型不是一个级别的 不行
      

  2.   

    重新写一个DLL就解决问题了~~
      

  3.   


    重新写一个DLL当然可以解决。可是你想过没有,新的DLL和现在的DLL所有的操作都是一样的,就因为一个变量差异就重写,将来又有新的要求,难道又新写一个DLL吗?就是再写,工作量也大,而且容易引入低级错误。我有个想法,就是用一个命令,如pragma,但没有想到好的解决办法。
      

  4.   

    调用方有直接使用 CMyClass 的成员变量 m_nV 吗?如果有的话会出现问题,如果没有的话就不会有问题。
      

  5.   


    如果DLL设计的时候就没有考虑过适应不同的变量类型的话,那么就没办法了,这个属于设计缺陷,不是靠coding可以解决的问题。ps:你这个具体情况,可否考虑循环,对vector的每一个元素调用一次dll中的函数?
      

  6.   

    肯定是有的。而且这个DLL也是我写的。所以在重新编译这个DLL的时候,绝对会出现问题。
      

  7.   

    回magic7004:
    不能那么简单的用循环。
      

  8.   

    各位,或者我把问题描述简单点。
    把问题转化为如下形式:int i;
    if(i == 1)
    {
    //按m_nV为int型的方式编译;
    }
    else
    {
    //按m_nV为vector<int>类型的方式编译
    }
      

  9.   

    是你编程的方式存在问题。 既然DLL是两个工程共享的,就应该把公共的代码放在DLL中,
    而不是具体工程中。
    也就是说,CMyClass应该放在DLL中,然后对外开放不同的属性,分别针对Pro1和Pro2
    来调用。而不是DLL去调用Pro1或者Pro2的代码。
      

  10.   

    你的DLL需要考虑兼容这些问题,而不是应用
      

  11.   

    由于你的变量已经是完全不一样了
    一个是int一个是int数组要么dll中增加一个接口
    要么改变你调用的方式
      

  12.   

    貌似可以再DLL的 DLLMAIN中 判断当前调用DLL的MOUDLE 然后判断你的MOUDLE 再根据判断结果 做不同的事情就行了~