在Delphi XE2 Win32平臺中運行以下代碼。然而,同樣的代碼在Win64的平臺編譯會導致訪問衝突「EnumRCDataProc」如果在調試模式:Delphi XE2:調用WinAPI EnumResourceNames在Win64平臺中導致訪問衝突
procedure TForm2.Button1Click(Sender: TObject);
function EnumRCDataProc(hModule: THandle; lpszType, lpszName: PChar; lParam:
NativeInt): Boolean; stdcall;
begin
TStrings(lParam).Add(lpszName);
Result := True;
end;
var k: NativeInt;
L: TStringList;
H: THandle;
begin
H := LoadPackage('resource.bpl');
L := TStringList.Create;
try
EnumResourceNames(H, RT_RCDATA, @EnumRCDataProc, NativeInt(L));
ShowMessage(L.Text);
finally
L.Free;
UnloadPackage(H);
end;
end;
當調試Win64上平臺在Delphi XE2 IDE的代碼,我發現HMODULE的值EnumRCDataProc與變量H不匹配。我懷疑這可能是我爲EnumRCDataProc構造的參數錯誤的。但是,我無法弄清楚如何。有任何想法嗎?
編譯器不應該抱怨。本地枚舉函數根本不是問題。 – OnTheFly 2012-01-12 15:46:47
猜測,它爲什麼會發出:p – OnTheFly 2012-01-12 17:05:10
只要回調沒有訪問任何不應該成爲問題的形式的東西。再一次,只爲了這個目的,回調出來是正確的。過度打擊是什麼意思?這是否使上述答案的部分無效? – 2012-01-12 17:07:12