デバッグ用のgflagsツールを使用して、dllsオプションでフルページヒープを有効にしようとしています。これは、指定されたdllだけで、アプリケーションでフルページヒープを有効にします。gflags dllで有効にする完全なヒープが機能しません。
私はdllsオプションを使用しないとき、正常に動作します。割り当てられたメモリブロックを上書きしようとすると例外が発生することがあります。しかし、私がdllsオプションで同じ機能を有効にしようとすると、メインアプリケーションコードまたはdllコードのいずれかによって割り当てられたメモリブロックの例外が、ドキュメンテーションに従ってdllコード上になければなりません。
私はWindows XPとWindows 7の両方で試してみましたが、同じ動作をしました。私はdllの名前を誤って入力し、dllでフルページのヒープを有効にできない場合に備えて、何度もチェックしました。
無駄に両方のコマンドを試してみました:
gflags -p /enable test_dll1_app.exe /dlls test_dll1.dll
gflags -p /enable test_dll1_app.exe /dlls test_dll1.dll /full
これは、私がテスト用に使用していますコードです:
DLLコード:
#define TEST_DLL1_API __declspec(dllexport)
extern "C" TEST_DLL1_API int * fntest_dll1(void)
{
int * value0 = new int [413];
int * value = value0;
for (int i=0; i < 440; i++)
*value0++ = i;
return value;
}
メインアプリケーションのコード:
typedef int * (*AddFunc)();
int _tmain(int argc, _TCHAR* argv[])
{
HINSTANCE LoadDll;
LoadDll = LoadLibrary(_T("test_dll1.dll"));
if (LoadDll)
{
AddFunc pfnctFunc;
pfnctFunc = (AddFunc)GetProcAddress(LoadDll, "fntest_dll1");
if (pfnctFunc)
{
int * value = pfnctFunc();
for (int i=0; i < 440; i++)
*value++ = i;
}
}
int * value = new int [413];
for (int i=0; i < 440; i++)
*value++ = i;
return 0;
私のミスを特定するのに役立つ人はいますか? GB
これは、DLLベースでどのように動作するのか、実際にはわかりません。ヒープapiが特定のモジュールによって呼び出されたかどうかを判断する唯一の方法は、すべての呼び出しでスタックバックトレースを実行することです。 –