Delphi XE2 Win32 플랫폼에서 다음 코드를 실행하면 작동합니다.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 플랫폼에서 델파이 XE2 IDE에서 코드를 디버깅, 내가 EnumRCDataProc에 HMODULE의 가치를 발견 : 디버그 모드에서 실행되는 경우, 동일한 코드는 "EnumRCDataProc"에서 액세스 위반이 발생할 것이다하는 Win64 플랫폼에서 컴파일 변수 H와 일치하지 않습니다. EnumRCDataProc에 대해 생성 한 매개 변수에 문제가있을 수 있습니다. 그러나, 나는 방법을 이해할 수 없다. 어떤 아이디어?
컴파일러가 그것에 대해 불평해서는 안됩니다. 로컬 enum 함수는 전혀 문제가되지 않습니다. – OnTheFly
추측 컨데, 왜 그걸 내야합니까? p – OnTheFly
콜백이 문제가되어서는 안되는 양식을 액세스하지 않는 한. 그런 다음 다시 그 목적을 위해서만 콜백을 꺼내는 것이 올바른 일입니다. 파업은 무엇을 의미합니까? 그것은 위의 대답의 일부를 무효화합니까? –