很明显问的问题是回调函数相关的,如果我写了一个服务模块,现有两个独立的进程将要同时调用这个模块,并且都是注册回调函数的方式进行链接,请问该用什么技术来实现这个服务模块。
注:本人之前是用dll的方式来写这个模块的,一个进程先启动dll的服务,另一个进程在调用这个dll时使用的是同一个服务,这时发现了问题,使用共享内存的方式注册了外部的函数指针,原来这个指针只在一个进程中识别,另一个进程的地址在这里是无效的,有没有人利用dll的方式实现过这种处理,或者有什么其他的方式来实现,像com之类的。
个人msn是 [email protected]欢迎加我讨论
谢谢

解决方案 »

  1.   

    非常感谢楼上的回复, 目前就是利用共享数据段来处理回调函数的,举个例子如下 #pragma data_seg("flag_data") 
    BOOL initSign = FALSE; 
    CBFunA  FunA; 
    CBFunB  FunB; 
    #pragma data_seg() 
    #pragma comment(linker,"/SECTION:flag_data,RWS") dll在第一次启动的时候将会开启一个网络链接的服务,也就这时候会生成一个服务的实例,这时把initSign 置为TRUE,以后不管外部的其他进程如何调用这个dll,都将会判断到这个initSign = TRUE,从而不会再次创建实例而是共享之前启动的那个实例,我的问题来了,这里的回调函数就是我跟其他不同进程进行交互的方式。假如A进程第一次加载dll并且注册了FunA,那没错,这个FunA函数可以正常的使用,B进程注册了FunB,那问题来了,这个注册的函数指针是B进程的内存空间的地址,在进程A中是没法直接使用的,因为dll启动的时候是由进程A启动的,从而调用FunB的时候会出现异常。 
    谢谢您的回答