[英]Sharing an object between instances of a C++ DLL
大家早上好,
如果标题不太清楚,请原谅我,我将在这里尝试解释更多:
我目前正在使用ASI for VBS2。 VBS2从VBS2 DLL插件执行功能。 我有自己的应用程序,我想在使用该插件时修改该插件中的变量,以更改VBS2正在执行的操作。 我开始时(可能很愚蠢)在运行VBS2程序时直接用我的应用程序更改变量。
当此方法不起作用时,我进行了测试,发现VBS2程序使用的是“消息”对象的另一实例,该实例中我存储了变量,而我的应用程序正在访问该实例。
我想做的是让我的应用程序访问由VBS2访问的对象的同一实例。 我尝试了一下
#pragma data_seg(".testseg")
Message msg;
void foo(...); //etc.
#pragma data_seg()
但由于某种原因或其他原因,仍然似乎有两个实例在使用。
我将不胜感激所有帮助,并补充说C ++对我来说是一种新语言,因此请保持谦逊。 :)
谢谢,M
您需要使用链接器标志来告诉链接器将该段放置在可共享内存中。
请参阅http://msdn.microsoft.com/en-us/library/ms933104.aspx
我相信你需要添加类似
#pragma comment(linker, "/SECTION:.testseg,RWS")
到您的程序。 我不确定,这可能仅在DLL中有效...
如果我正确理解了您想要什么,则无法使用标准C / C ++工具来做到这一点。 您的程序和另一个程序位于单独的内存空间中,它们彼此完全隔离。 如果您的程序具有管理特权,则可以尝试使用WriteProcessMemory()读写其他进程的内存空间:
http://msdn.microsoft.com/zh-cn/library/ms681674%28v=VS.85%29.aspx
但是,这就是在该内存空间中找到合适的对象的问题。
尚不清楚您是否有插件的来源。 如果这样做,则可以使用其他进程间通信技术。 不幸的是,没有像更改变量那样简单。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.