不同exe共享DLL该怎么实现。 现在我是用文件映射,返回这个DLL的句柄,但结果句柄可以得到,但其中一个exe无法执行DLL中的FUNC,为什么?高手有什么好方法来实现 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在DLL中,设置共享段。并将段中这些数据导出。这样就可以达到共享的目的。 共享数据段只能共享数据吧?呵呵,是不是使用static函数 共享段我也做了,现在重新说一遍,刚才表述不清exe1 exe2------------- DLLexe1先loadlibrary,调用dll中的一个函数,这个函数处理后会返回一个句柄,这个句柄就存在dll的共享段中然后exe2 loadlibrary,调用另一个函数,这个函数会返回这个句柄。结果是exe2可以得到这个句柄的值,这些都没有问题,错误是无法使用这个句柄做操作,exe2中需要这个句柄进行处理百思不解,高手指点 ----------------------------------------------to vcleaner(我没做大哥已经很久了.......) :----------------------------------------------不知你说使用static函数有什么不同之处,望指点一二 应该让 handle 为两个进程所公用。在dll中。#pragma data_seg("Shared")HANDLE#pragma data_seg() 可参考 《windows核心编程》P525 to tango_lu(tango_lu):应该让 handle 为两个进程所公用。在dll中。#pragma data_seg("Shared")HANDLE#pragma data_seg()---------------------------------------我确实是这么做的 请大家到http://community.csdn.net/Expert/topic/3419/3419245.xml?temp=.5560114去踊跃发言,问题一直没有解决 错误是无法使用这个句柄做操作>>有什么错误?使用的是什么handle? 得到的handle里有值,而无法利用它来做操作handle是一个串口的返回值 在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") to crystal521(水晶泪):你说的共享数据段的方法我使用过,的确,如果共享的数据是普通的字符、数字,这种方法没有任何问题,不过现在我要共享的是一个Handle,不是简单的传输数值,而是还要用它进行操作,这样这种方法能传过去值但并不能在另一个进程中正确使用。我想我说的很详细了吧,其实,后来我自己想了一下,发现进程间共享句柄的确有问题,只是现在还没有高手回答我up again!等待... 一般来说对于操作系统的内核句柄,比如线程句柄等等它们是不能在进程中进行共享的,也就是说这些句柄只能属于进程私有,实际上返回的这些句柄值是进程句柄表中的索引值。楼主如果想共享这些句柄,可以尝试用DuplicateHandle()API进行进程间的句柄自制。 句并仅仅是个索引值,同一对象在不同进程中的句柄的值是不同的跨进程的句柄是没有意义的进程间传递句柄要通过DuplicateHandle转化 MFC 双缓冲画橡皮条线段,只能画一条??? 关于List Control的两个问题,请大家帮我一下,谢谢! 出现了“对未命名的文件进行越界读写” 如何在vc中运行绘图程序??? 有没有办法在机器上实现一个虚拟打印机? 请问怎样通过编程来遍历一个控件的所有属性名称与其值? 谁来教教我? 关于WTL对话框中ListViewCtrl中右键弹出弹出式菜单的问题 windows C++客户端如何分享一张图片到新浪腾讯微博和微信。 怎样判断当前的电脑硬件配置 是否适合 玩某款游戏。。。。。。 mfc socket 编程要求 哪些 头文件?(很郁闷!!!) 关于曲线的绘制和存储问题?
并将段中这些数据导出。这样就可以达到共享的目的。
-------------
DLLexe1先loadlibrary,调用dll中的一个函数,这个函数处理后会返回一个句柄,这个句柄就存在dll的共享段中
然后exe2 loadlibrary,调用另一个函数,这个函数会返回这个句柄。结果是exe2可以得到这个句柄的值,这些都没有问题,错误是无法使用这个句柄做操作,exe2中需要这个句柄进行处理百思不解,高手指点
to vcleaner(我没做大哥已经很久了.......) :
----------------------------------------------
不知你说使用static函数有什么不同之处,望指点一二
HANDLE
#pragma data_seg()
应该让 handle 为两个进程所公用。在dll中。#pragma data_seg("Shared")
HANDLE
#pragma data_seg()
---------------------------------------
我确实是这么做的
http://community.csdn.net/Expert/topic/3419/3419245.xml?temp=.5560114
去踊跃发言,问题一直没有解决
>>有什么错误?
使用的是什么handle?
int iTotal = 0 ;
WCHAR szStrings [MAX_STRINGS][MAX_LENGTH + 1] = { '\0' } ;
#pragma data_seg () #pragma comment(linker,"/SECTION:shared,RWS")
你说的共享数据段的方法我使用过,的确,如果共享的数据是普通的字符、数字,这种方法没有任何问题,不过现在我要共享的是一个Handle,不是简单的传输数值,而是还要用它进行操作,这样这种方法能传过去值但并不能在另一个进程中正确使用。我想我说的很详细了吧,其实,后来我自己想了一下,发现进程间共享句柄的确有问题,只是现在还没有高手回答我up again!等待...
也就是说这些句柄只能属于进程私有,实际上返回的这些句柄值是进程句柄表中的索引值。
楼主如果想共享这些句柄,可以尝试用DuplicateHandle()API进行进程间的句柄自制。