#pragma data_seg("Shared")
char ThisPath_bak[255];//记录上次调用dll中函数的进程的路径,试图用这个作为公 共                       变量
#pragma data_seg()char ThisPath[255];                  //记录当前调用dll中函数的进程的路径static LRESULT WINAPI Sttoy_SttProc (
   int nCode,
   WPARAM wParam, 
   LPARAM lParam) 
{
   GetModuleFileName(0,ThisPath,sizeof(ThisPath));
   if (lstrcmp(ThisPath,ThisPath_bak)!=NULL)
   {
      strcpy(ThisPath_bak,ThisPath);                        
      //因为是不同的进程(路径)执行了该函数,则做一些操作
   }
}
以上代码很简单,就是试图用ThisPath_bak记录上次执行Sttoy_SttProc 的进程的路径,用于判断当前执行Sttoy_SttProc的进程的路径是否还是上一个.执行结果如下:第一次用A进程调用Sttoy_SttProc,ThisPath_bak为空 ThisPath为当前路径,如果还是该进程调用Sttoy_SttProc,则ThisPath_bak,ThisPath都等于该进程的路径.
可是问题就在,当另一个B进程调用Sttoy_SttProc时,ThisPath_bak还是为空,ThisPath为B进程的路径.
而如果现在再用A进程调用Sttoy_SttProc,则ThisPath_bak为A进程的路径.我总觉得每个进程都有属于自己的ThisPath_bak,大虾们帮帮我啊!!急

解决方案 »

  1.   

    每次调用sttoy_Sttproc都重新来过,当然记不住
      

  2.   

    大哥,那有什么方法可以记住呢?或者告诉我:
    怎么样在dll中得知目前调用dll中自定义函数的进程和上次调用此函数的进程不是同一个进程?
      

  3.   

    这是因为在进程A调用了你的DLL结束后,它就把你的DLL释放了,而等到进程B再调用你的DLL时,则是另一个拷贝了。你的做法只能是在进程A还没有释放DLL前,进程B已经开始调用DLL才能实现你的目的。改进做法是,不要在内存中记住上次进程的文件名,而将它写入磁盘文件中。
      

  4.   

    看看是不是这个原因,在你得DLL所在工程得.def文件中,你应该声明该共享变量:
    在。def中加上:
    SECTIONS 
           .Shared READ WRITE SHARED
    试试。