现在我是用文件映射,返回这个DLL的句柄,但结果句柄可以得到,但其中一个exe无法执行DLL中的FUNC,为什么?
高手有什么好方法来实现

解决方案 »

  1.   

    在DLL中,设置共享段。
    并将段中这些数据导出。这样就可以达到共享的目的。
      

  2.   

    共享数据段只能共享数据吧?呵呵,是不是使用static函数
      

  3.   

    共享段我也做了,现在重新说一遍,刚才表述不清exe1    exe2
    -------------    
        DLLexe1先loadlibrary,调用dll中的一个函数,这个函数处理后会返回一个句柄,这个句柄就存在dll的共享段中
    然后exe2 loadlibrary,调用另一个函数,这个函数会返回这个句柄。结果是exe2可以得到这个句柄的值,这些都没有问题,错误是无法使用这个句柄做操作,exe2中需要这个句柄进行处理百思不解,高手指点
      

  4.   

    ----------------------------------------------
    to vcleaner(我没做大哥已经很久了.......) :
    ----------------------------------------------
    不知你说使用static函数有什么不同之处,望指点一二
      

  5.   

    应该让 handle 为两个进程所公用。在dll中。#pragma data_seg("Shared")
    HANDLE
    #pragma data_seg()
      

  6.   

    可参考 《windows核心编程》P525
      

  7.   

    to tango_lu(tango_lu):
    应该让 handle 为两个进程所公用。在dll中。#pragma data_seg("Shared")
    HANDLE
    #pragma data_seg()
    ---------------------------------------
    我确实是这么做的
      

  8.   

    请大家到
    http://community.csdn.net/Expert/topic/3419/3419245.xml?temp=.5560114
    去踊跃发言,问题一直没有解决
      

  9.   

    错误是无法使用这个句柄做操作
    >>有什么错误?
    使用的是什么handle?
      

  10.   

    得到的handle里有值,而无法利用它来做操作handle是一个串口的返回值
      

  11.   

    在dll中使用共享数据#pragma data_seg ("shared")
     int iTotal = 0 ;
     WCHAR szStrings [MAX_STRINGS][MAX_LENGTH + 1] = { '\0' } ;
    #pragma data_seg () #pragma comment(linker,"/SECTION:shared,RWS")
      

  12.   

    to crystal521(水晶泪):
    你说的共享数据段的方法我使用过,的确,如果共享的数据是普通的字符、数字,这种方法没有任何问题,不过现在我要共享的是一个Handle,不是简单的传输数值,而是还要用它进行操作,这样这种方法能传过去值但并不能在另一个进程中正确使用。我想我说的很详细了吧,其实,后来我自己想了一下,发现进程间共享句柄的确有问题,只是现在还没有高手回答我up again!等待...
      

  13.   

    一般来说对于操作系统的内核句柄,比如线程句柄等等它们是不能在进程中进行共享的,
    也就是说这些句柄只能属于进程私有,实际上返回的这些句柄值是进程句柄表中的索引值。
    楼主如果想共享这些句柄,可以尝试用DuplicateHandle()API进行进程间的句柄自制。
      

  14.   

    句并仅仅是个索引值,同一对象在不同进程中的句柄的值是不同的跨进程的句柄是没有意义的进程间传递句柄要通过DuplicateHandle转化