繁体   English   中英

在C ++ DLL实例之间共享对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM