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

时间:2010-11-16 11:35:14

标签: c++ dll pragma

早上好,

如果标题不太清楚,请原谅我,我会在这里解释一下:

我目前正在使用ASI for VBS2。 VBS2从VBS2 DLL插件执行函数。我有自己的应用程序,我想用它来修改该插件中的变量,以便更改VBS2正在执行的操作。我开始时,愚蠢的是,在VBS2程序运行时直接用我的应用程序更改变量。

当这不起作用时,我测试并发现VBS2程序正在使用“message”对象的不同实例,其中我将变量存储到我的应用程序正在访问的对象。

我想要做的是让我的应用程序访问VBS2正在访问的对象的同一个实例。我用

进行了一些实验
#pragma data_seg(".testseg")
Message msg;
void foo(...); //etc.
#pragma data_seg()

但由于某种原因,仍然会出现两种情况。

我非常感谢任何和所有的帮助,并且会补充说C ++对我来说是一种新语言,所以请保持温和。 :)

谢谢, 中号

2 个答案:

答案 0 :(得分:1)

您需要使用链接器标志来告诉链接器将该段放在可共享的内存中。

请参阅http://msdn.microsoft.com/en-us/library/ms933104.aspx

我相信你需要添加像

这样的东西
#pragma comment(linker, "/SECTION:.testseg,RWS")

到你的程序。 我不确定,这可能只适用于DLL ......

答案 1 :(得分:0)

如果我正确理解了您的需求,则无法使用标准C / C ++工具执行此操作。您的程序和其他程序位于不同的存储空间中,它们完全相互隔离。如果您的程序具有管理权限,则可以尝试阅读&使用WriteProcessMemory()编写其他进程的内存空间:

http://msdn.microsoft.com/en-us/library/ms681674%28v=VS.85%29.aspx

但是那时存在在该存储空间中找到正确对象的问题。

目前尚不清楚您是否拥有该插件的来源。如果这样做,还可以使用其他进程间通信技术。不幸的是,没有像改变变量一样简单。