DLL間でオブジェクトを共有するにはどうすればよいですか?
例:
DLLAはプロセスAによってロードされます。DLLAはデータを収集します(プロセスAからの呼び出しをインターセプトします)。
DLLBはPascalプログラムによってロードされ、DLLAが収集したデータを使用したいと考えています。
次のように、DLLAを使用してマッピングを作成しました。
GL_EXTERN bool __stdcall CreateSharedMemory()
{
if ((hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, MapSize, SharedMemoryName.c_str())) == NULL)
{
return false;
}
if ((pData = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, MapSize)) == NULL)
{
CloseHandle(hMapFile);
return false;
}
return true;
}
そして、DLLBはそれを開いてマップするだけです。
彼らはコマンドを共有することができます。したがって、DLL BはDLLAコマンドを実行してデータを取得できますが、メモリ全体でオブジェクト/クラス/ベクトルを共有する方法がわからないようです。
ポインタを使用してみましたが、これは無効であり、アクセス違反エラーが発生することに気付きました。また、整数をうまく共有しているように見えますが、floatを共有できないようです:Sこれらのタスクを実行するにはどうすればよいですか?
編集:私が行うことを伝えるために:
int* Foo = static_cast<int*>(pData); where pData is the map pointer.
//Then I do:
Foo[0] = X; Foo[1] = Y;
そして、対応する値からプロセスに読み取りと書き込みをさせます。
情報:
これはDLLAのファイルです:http://pastebin.com/MFkqwxJe およびhttp://pastebin.com/MDeWprkb
これはDLLBのファイルです:http://pastebin.com/Uj3dijc4 およびhttp://pastebin.com/vkDdPp7e
編集:要求に応じてhttp://pastebin.com/hNF6Cu2Lに絞り込みました。