0

次のコードを使用して、win32 実行可能ファイルに DLL をロードしています。

int _tmain(int argc, _TCHAR* argv[])
{
    DWORD somevar = 0;
    HINSTANCE hDLL;
    hDLL = LoadLibrary( argv[1] );
    if ( !hDLL ){
      MessageBox(NULL, _T("Unable to load dll."), _T("Fatal Error"), MB_ICONERROR);
      return -1;
    }
}

DLL がロードされると、DLL はその親実行可能ファイルの変数、たとえば上記の DWORD 変数にアクセスできますsomevarか?

シナリオは、DLL をロードする実際の実行可能ファイルが既にコンパイルされており、運用環境で使用されているため、親の実行可能ファイルにコードを追加できないというものです。参考までにソースコードだけ載せておきます。

4

2 に答える 2

0

somevar 変数にアクセスするには、var のアドレスを渡す必要があります。var を dll へのポインタとして渡すことを意味します。

__declspec(dllexport) void DLLFunc1(DWORD* somevar);

---あなたのコードで

 DWORD somevar = 0;
hDLL = LoadLibrary("MyDLL");
if (hDLL != NULL)
{
   lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,                                          "DLLFunc1")
}
lpfnDllFunc1(&somevar);
于 2012-06-20T16:27:47.870 に答える
0

DLL からアクセサ関数をエクスポートする必要があります。これは次のようになります。

__declspec(dllexport) DWORD getSomevar();
__declspec(dllexport) void setSomevar(DWORD somevar);

(この時点では、おそらくsomevarスタック変数にしない方がよいでしょう。)

読み込まれた DLL は、GetProcAddressを使用してこれらの関数のアドレスを取得し、それらを呼び出すことができます。リンク先にサンプルコードがあります。

于 2012-06-20T16:21:52.617 に答える