早上好,
如果标题不太清楚,请原谅我,我会在这里解释一下:
我目前正在使用ASI for VBS2。 VBS2从VBS2 DLL插件执行函数。我有自己的应用程序,我想用它来修改该插件中的变量,以便更改VBS2正在执行的操作。我开始时,愚蠢的是,在VBS2程序运行时直接用我的应用程序更改变量。
当这不起作用时,我测试并发现VBS2程序正在使用“message”对象的不同实例,其中我将变量存储到我的应用程序正在访问的对象。
我想要做的是让我的应用程序访问VBS2正在访问的对象的同一个实例。我用
进行了一些实验#pragma data_seg(".testseg")
Message msg;
void foo(...); //etc.
#pragma data_seg()
但由于某种原因,仍然会出现两种情况。
我非常感谢任何和所有的帮助,并且会补充说C ++对我来说是一种新语言,所以请保持温和。 :)
谢谢, 中号
答案 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
但是那时存在在该存储空间中找到正确对象的问题。
目前尚不清楚您是否拥有该插件的来源。如果这样做,还可以使用其他进程间通信技术。不幸的是,没有像改变变量一样简单。