1

みんなおはよう、

タイトルが明確でない場合はご容赦ください。ここで詳しく説明します。

現在、VBS2 の ASI を使用しています。VBS2 は、VBS2 DLL プラグインから関数を実行します。VBS2 によって実行されているものを変更するために、使用中にそのプラグイン内の変数を変更するために使用したい独自のアプリケーションがあります。ばかげているかもしれませんが、VBS2 プログラムの実行中にアプリケーションで変数を直接変更することから始めました。

これが機能しなかったとき、テストしたところ、VBS2 プログラムが、変数を格納していた「メッセージ」オブジェクトの別のインスタンスを、アプリケーションがアクセスしているものとは異なるインスタンスを使用していることがわかりました。

私がやりたいことは、アプリケーションが VBS2 によってアクセスされるオブジェクトの同じインスタンスにアクセスすることです。私は少し実験しました

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

しかし、何らかの理由で、2 つのインスタンスが使用されているように見えます。

私はすべての助けを大いに感謝し、C++ は私にとって新しい言語であることを付け加えたいので、優しくしてください。:)

ありがとう、M

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 に答える