L'esecuzione del codice seguente nella piattaforma XE2 Win32 di Delphi funziona. Tuttavia, lo stesso codice compilato in piattaforma Win64 causerà violazione di accesso in "EnumRCDataProc" se l'esecuzione in modalità di debug:Delphi XE2: richiama WinAPI EnumResourceNames causa violazione di accesso nella piattaforma 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;
Quando eseguire il debug del codice Delphi XE2 IDE su piattaforma Win64, ho trovato il valore di hModule in EnumRCDataProc non corrisponde alla variabile H. Sospetto che possa essere qualcosa di sbagliato nei parametri che ho costruito per EnumRCDataProc. Tuttavia, non riesco a capire come. Qualche idea?
Il compilatore non dovrebbe lamentarsi di ciò. La funzione enum locale non è affatto un problema. – OnTheFly
Indovina perché emette il messaggio: p – OnTheFly
Finché la richiamata non accede a nessuna forma che non dovrebbe costituire un problema. Poi di nuovo, solo a tale scopo, prendere la callback è la cosa giusta. Cosa significa over-strike? Ciò annulla la parte della risposta sopra? –