Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+的实例之间共享对象+;动态链接库_C++_Dll_Pragma - Fatal编程技术网

C++ 在C+的实例之间共享对象+;动态链接库

C++ 在C+的实例之间共享对象+;动态链接库,c++,dll,pragma,C++,Dll,Pragma,大家早上好 如果标题不太清楚,请原谅,我将尝试在此处解释更多内容: 我目前正在为VBS2的ASI工作。VBS2执行VBS2 DLL插件中的函数。我有我自己的应用程序,我想用它来修改插件中的变量,同时使用它来更改VBS2执行的内容。我开始时,尽管可能很愚蠢,但在VBS2程序运行时,直接用我的应用程序更改变量 当这不起作用时,我测试并发现VBS2程序使用的“message”对象实例与应用程序访问的实例不同,我在其中存储变量 我想做的是让我的应用程序访问VBS2访问的对象的同一个实例。我试过一点 #p

大家早上好

如果标题不太清楚,请原谅,我将尝试在此处解释更多内容:

我目前正在为VBS2的ASI工作。VBS2执行VBS2 DLL插件中的函数。我有我自己的应用程序,我想用它来修改插件中的变量,同时使用它来更改VBS2执行的内容。我开始时,尽管可能很愚蠢,但在VBS2程序运行时,直接用我的应用程序更改变量

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

我想做的是让我的应用程序访问VBS2访问的对象的同一个实例。我试过一点

#pragma data_seg(".testseg")
Message msg;
void foo(...); //etc.
#pragma data_seg()
但出于某种原因,似乎仍在使用两个实例

<>我非常感谢所有的帮助,并补充说C++是一种新语言,所以请温柔些。p> 谢谢,
M

如果我正确理解了您的需求,那么使用标准的C/C++工具就无法做到这一点。您的程序和另一个程序位于单独的内存空间中,它们彼此完全隔离。如果您的程序具有管理权限,则可以尝试使用WriteProcessMemory()读取和写入另一个进程的内存空间:

但是,还有一个问题,就是如何在内存空间中找到正确的对象


现在还不清楚你是否有插件的源代码。如果您这样做,还可以使用其他进程间通信技术。不幸的是,最简单的方法莫过于更改变量。

如果我正确理解了您的需求,那么使用标准C/C++工具就无法做到这一点。您的程序和另一个程序位于单独的内存空间中,它们彼此完全隔离。如果您的程序具有管理权限,则可以尝试使用WriteProcessMemory()读取和写入另一个进程的内存空间:

但是,还有一个问题,就是如何在内存空间中找到正确的对象


现在还不清楚你是否有插件的源代码。如果您这样做,还可以使用其他进程间通信技术。不幸的是,没有比更改变量更简单的了。

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

我相信你需要添加一些类似的内容

#pragma comment(linker, "/SECTION:.testseg,RWS")
到您的程序。
我不确定,这可能只适用于DLL…

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

我相信你需要添加一些类似的内容

#pragma comment(linker, "/SECTION:.testseg,RWS")
到您的程序。
我不确定,这可能只在DLL中工作…

我有源代码,是的。我只是在想,如果我让我的应用程序修改另一个DLL中的一个变量,让VBS2 DLL访问该变量,这会起作用吗?或者这会造成和以前一样的问题吗?我可能完全走错了路;VBS2 ASI插件向VBS2发送消息,以在引擎内执行各种脚本。我所要做的就是动态地更改正在发送的消息,我知道这是可以做到的。也非常感谢你的回复。我确实有消息来源,是的。我只是在想,如果我让我的应用程序修改另一个DLL中的一个变量,让VBS2 DLL访问该变量,这会起作用吗?或者这会造成和以前一样的问题吗?我可能完全走错了路;VBS2 ASI插件向VBS2发送消息,以在引擎内执行各种脚本。我所要做的就是动态地更改正在发送的消息,我知道这是可以做到的。非常感谢您的回复。哦,您可能需要声明您的变量为volatile,以确保编译器实际读取它们,并且不会将值缓存在寄存器等中。它在任何地方都可以工作,EXE也可以。但是,在本例中,“VBS2”进程和另一个进程之间共享的唯一模块是都加载的插件DLL;看了一眼,我认为我可以把它放在我已经拥有的代码前面(例如,#pragma data_seg(…)?哦,你可能需要声明你的变量为volatile,以确保编译器实际读取它们,并且不会将值缓存在寄存器中等。它可以在任何地方工作,也可以在EXE中工作。但是,在本例中,“VBS2”进程和另一个进程之间共享的唯一模块是都加载的插件DLL;在快速查看之后,我是否认为我可以将其放在我已经拥有的代码之前(即#pragma data_seg(…)?您是否希望函数
foo()
以数据段
.testseg
结尾?这可能会导致与DEP发生一些冲突。您是否希望函数
foo()
在数据段
.testseg
中结束?这可能会与DEP产生一些冲突。