个dll(记为a.dll),里面有个export的函数Func1,某个客户程序调用了Func1,这些都没有问题,但突然有一天,a.dll的作者扩展了此dll,往里面新添了个export的函数Func2,我的问题出现了:此时a.dll中Func1的函数地址会起变化么?如果那个客户程序用这个更新的dll覆盖原来的,但没有重新build他的客户程序,此时运行它的客户程序会不会因为找不到Func1的函数地址而失败?(第二个问题本质还是第一个问题)

解决方案 »

  1.   

    如果你是静态连接到该dll就会有你说的情况,如果客户程序是调用GetProcessAddr()来访问就不会有问题
      

  2.   

    经我VC6测试,在a.dll中添加Func2,然后还删掉了一些本来export的其它函数,然后重新build a.dll,此时经过VC6工具Depends查看可知Func1函数地址已经改变。我把这个新的a.dll覆盖原来的dll给客户程序使用,客户程序并没有重新build,直接运行此客户程序没有任何错误,不会出现Func1找不到现象,也能正常调用Func1 !!!