我所使用的软件环境是release版的exe文件,自己用vc编写的模块代码是通过编译成dll来由软件环境加载.做各类比,就像是我的软件环境是matlab中的siumlulink,其中拖拽的模块是我用vc写的。现在的问题是我在原有的模块基础上编写了几个自己的模块,编译加到原有的同名dll库中已被调用。程序调试有问题,下断点跟踪流程发现,程序有一接口函数,所有初始化再次做。当运行加载模块时,首先执行此接口函数,然后逐一构造原有模块,当致信到我编的模块时,突然又跳到接口函数初始化,造成原先数据丢失。这是怎么回事?我再往原有dll中加我的代码时,试了rebuild all,build xx.dll问题依然。可是打开dll库看我编的模块函数确实已加进去了,迷惑,高手指点。接口函数原有说明: xxDll is xx User DLL Entery 
//   
//      ALL dll's must supply this function to
//      give title,remak,and image of the dllxx为exe执行环境,类matlab。

解决方案 »

  1.   

    我的意思是,仿真环境是xx.exe(如matlab),其本身包含一些现有可用的模块(如matlab中simulink的模块),但是其还允许用户自己按一定的接口编写自己的模块,自己用vc编写的模块代码是通过编译成dll来由软件环境加载的。先前已经变了几个模块函数封装在自己命名的dll中,运行没问题,在接口函数中进行了一些全局量的初始化。当我这几天又加了几个模块到同名的dll中时,编译,连接都没错,而且在dll中查看,确实后加的几个模块函数加进去了。可是运行时出错,正确的流程应该是运行xx.exe文件,打开模块加载页,程序应先调接口函数,然后调dll逐一构造各个模块函数。在每个模块构造函数前下断点调试发现,先前我编的函数都在接口函数调用后逐一构造,但当调后来加的函数时,程序突然又跳到接口函数,然后才调后加函数的构造函数。由于接口函数中初始化了全局量,后构造的几个模块函数接着由于读数据文件改变了几个值,但由于上述流程的跳转使又赋了遍初值,造成数据丢失。迷惑,不知为什么,怎么解决。
      

  2.   

    一:保证这个接口函数只在运行开始时初始化,就像InitInstance一样,一系死的错误完全是由此引起的,请检查后来添加的函数是否手动的调用了接口函数!二:能够避免用全局的吗? 能避免则避免,这是一个设计原则!
      

  3.   

    全局变量不能省,程序模块之间有联系!用楼上的一法看一下,谢谢先!其他高手有知道的请指点。能解释一下dll库的调用过程也行啊!谢谢!