解决方案 »

  1.   

    不导出来应该不会引起重复定义  肯定是2个不同变量  不导出来 主程序和dll都对对方的变量一无所知...
      

  2.   

    当编译完成时,两个不同模块之间的只是call地址值了,与变量名没关系了,放心好了
      

  3.   

    借lz的帖子问个类似问题,这是我的问题,后来发现和你这个问题比较类似。http://bbs.csdn.net/topics/390684948?page=1#post-396516670。我的动态库和主程序共用了一个A.cpp和A.h,然后A.cpp中定义了一个全局bool变量,这样的话我在dll中对这个变量做的修改只是修改的我的dll中的。而我主程序中读取时发现是另外一个地址的东西(虽然两个的变量名都是同一个,但是地址是不同的),如果dll要和主程序共用同一个地址的变量该如何做呢?我现在把A.cpp从dll项目中删除掉的话,又因为dll中要调用这个文件里的几个函数而导致编译报“无法解析的外部符号xxx”,错误,如果不删掉的话又会出现另一份全局变量,导致和主程序访问的不是同一个。如果无法真正共享同一个内存的话是不是只有通过dll函数接口来交换数据了?
      

  4.   

    我看了几遍,确定自己没有看错,请教一下,动态库怎么静态链接啊?
    哦! 可能是我用词错误,这个链接应该是加载
    抱歉!动态库编译后生成 动态库.dll和它的导入库 .lib ;
    静态加载,就是直接把这个 .lib链接到.exe 或者其他静态库,动态库这样目标程序,就有了,动态库的,所有导出符号的,导入表;
    只要.dll 是可以找到的---在系统目录,应用程序目录 等目录内;
    程序就可以使用动态库的任何导出符号---变量,或者函数---
    这个称为静态链接--加载。例如 Windows API 的三大模块 kenerl32.dll gdi32.dll user32.dll 
    就是这样链接到应用程序的。动态库的动态加载
    是应用程序中在的代码中,主动加载动态库
    Windows 中 通过 LoadLibarry 或者 LoadLibarryEx 函数加载 动态库
    通过GetProcAddress 获取符号的地址
      

  5.   

    我看了几遍,确定自己没有看错,请教一下,动态库怎么静态链接啊?
    哦! 可能是我用词错误,这个链接应该是加载
    抱歉!动态库编译后生成 动态库.dll和它的导入库 .lib ;
    静态加载,就是直接把这个 .lib链接到.exe 或者其他静态库,动态库这样目标程序,就有了,动态库的,所有导出符号的,导入表;
    只要.dll 是可以找到的---在系统目录,应用程序目录 等目录内;
    程序就可以使用动态库的任何导出符号---变量,或者函数---
    这个称为静态链接--加载。例如 Windows API 的三大模块 kenerl32.dll gdi32.dll user32.dll 
    就是这样链接到应用程序的。动态库的动态加载
    是应用程序中在的代码中,主动加载动态库
    Windows 中 通过 LoadLibarry 或者 LoadLibarryEx 函数加载 动态库
    通过GetProcAddress 获取符号的地址

    即使是静态加载也不会冲突的。