我的设想:1 主exe从socket接收数据放到一个队列中.数据节点是有ServiceID的.比如队列是 g_DataQueue2 加载一个DLL,这个DLL只处理某一个ServiceID的节点3 但是:DLL创建的线程函数中怎么访问主exe中的全局变量 g_DataQueue

解决方案 »

  1.   

    线程函数一般是无法访问主调的全局变量的,但是,你可以在调用Dll中接口的时候把参数传进去,就当前情况,可以传进指向g_DataQueue的指针。
    当然,Dll中需要用IsBadReadPtr判断一下传入的指针是否有效。
      

  2.   

    请大家看清楚.我的dll跟主exe其实没有什么关系,除了loadlibrarycase dll_process_attach:
      createthread(func);func()
    {
     g_DataQueue->GetHead();
      
    }所以 dll中的线程不可能接收exe的参数.
      

  3.   

    你的问题我已经在另一贴里回了,去看看吧
    http://community.csdn.net/Expert/topic/3515/3515508.xml?temp=2.303714E-02
      

  4.   

    本来可以不用内存映像文件的,你只要在DLL中导出一个函数,其一个参数就是指向g_DataQueue的指针类型,然后在exe中调用该函数传入g_DataQueue的地址就可以了;你说你想要exe和dll尽量互不干扰,我以为你想跨进程使用呢。
      

  5.   

    直接在EXE和DLL之间共享全局变量。#pragma data_seg("Shared")struct data_queue * DataQueue = NULL;#pragma data_seg()#pragma comment(linker, "/SECTION:Shared,RWS")
      

  6.   

    我现在用的是进程通信中的映射文件对象方法其它方法也可以,象exe导出函数,共享数据段等。因为有人留言说直接include就可以,但是他没有给出实例代码,所以我一直纳闷希望有人能指出直接include的方法或者指出他是不对的。