Delphi XE3 を使用して 64 ビット COM DLL にコンパイルするコードがあります。
function TRPMFileReadStream.Read(var Buffer; const Count: Longint): Longint;
begin
if ((Self.FPosition >= 0) and (Count > 0)) then
begin
Result := Self.FSize - Self.FPosition;
if ((Result > 0) and (Result >= Count)) then
begin
if (Result > Count) then
begin
Result := Count;
end;
CopyMemory(
Pointer(@Buffer),
Pointer(LongWord(Self.FMemory) + Self.FPosition),
Result
);
Inc(Self.FPosition, Result);
Exit;
end;
end;
Result := 0;
end;
Win7-64bit では、上記は正常に動作します。ただし、Win8-64bit では、同じ DLL ファイルが CopyMemory で Access Violation をスローします。CopyMemory は WinAPI.windows ユニットに実装されています。
こんな感じです。
procedure CopyMemory(Destination: Pointer; Source: Pointer; Length: NativeUInt);
begin
Move(Source^, Destination^, Length);
end;
何か案は?ありがとう。