1

大家早上好,

如果标题不太清楚,请见谅,我会在这里尝试更多解释:

我目前正在为 VBS2 使用 ASI。VBS2 从 VBS2 DLL 插件执行函数。我有自己的应用程序,我想在使用该插件时修改该插件中的变量,以更改 VBS2 正在执行的内容。我一开始可能很愚蠢,在 VBS2 程序运行时直接用我的应用程序更改变量。

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

我想做的是让我的应用程序访问 VBS2 访问的对象的相同实例。我已经尝试了一点

#pragma data_seg(".testseg")
Message msg;
void foo(...); //etc.
#pragma data_seg()

但由于某种原因,似乎仍然使用了两个实例。

我将非常感谢任何和所有的帮助,并补充说 C++ 对我来说是一门新语言,所以请温柔一点。:)

谢谢,米

4

2 回答 2

1

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

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

我相信你需要添加类似的东西

#pragma comment(linker, "/SECTION:.testseg,RWS")

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

于 2010-11-16T13:50:48.613 回答
0

如果我正确理解你想要什么,你不能用标准的 C/C++ 工具来做到这一点。您的程序和其他程序位于不同的内存空间中,并且彼此完全隔离。如果您的程序具有管理权限,您可以尝试使用 WriteProcessMemory() 读取和写入其他进程的内存空间:

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

但是在那个内存空间中找到正确的对象是一个问题。

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

于 2010-11-16T11:48:52.027 回答