次のヘッダーと CPP があります。
「Utils.h」
__declspec(dllexport) static char* GetRamMegabytes(char* &FreeMemory);
「ユーティリティ.cpp」
char* Utils::HardWare::GetRamMegabytes(char* &FreeMemory)
{
char* TotalMb = "";
MEMORYSTATUSEX statex;
statex.dwLength = sizeof(statex);
GlobalMemoryStatusEx(&statex);
float freeMemFloat = ((float)statex.ullAvailPhys/1024/1024);
float value =((float)statex.ullTotalPhys/1024/1024);
sprintf(FreeMemory,"%f",value);
sprintf(TotalMb,"%f",freeMemFloat);
return TotalMb;
}
DLL をコンパイルして、次のコードを使用して C# から PInvoke を作成しようとしています。
[DllImport("LndNativeAssembly.dll", EntryPoint = "?GetRamMegabytes@HardWare@Utils@@SAPADAAPAD@Z", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public static extern IntPtr GetRamMegaBytes(IntPtr freemem);
次を使用してネイティブ関数を呼び出そうとしています:
IntPtr free = IntPtr.Zero;
IntPtr res = GetRamMegaBytes(free);
そして、私はこのエラーを受け取ります:
保護されたメモリを読み書きしようとしました。これは多くの場合、他のメモリが破損していることを示しています。