Delphi 2007에서 XE6으로 프로젝트를 마이그레이션 한 후에 우리가 만든 C# DLL에서 더 이상 내 보낸 함수를 제대로 호출 할 수 없습니다. C# 코드는 잘 실행되는 것으로 보이며 수행해야 할 작업을 수행하지만 실행이 끝나면 액세스 위반이 발생합니다.Delphi XE6에서 C# dll 함수를 호출하는 액세스 위반
코드 :
Result := False;
lib := LoadLibrary('KJPDFExport.dll');
if lib = 0 then RaiseLastOSError;
try
try
@prc := GetProcAddress(lib, 'ExportOffice');
if Assigned(prc) then
begin
Result := prc(sourceFile,
ChangeFileExt(destinationFile, ''),
pdfBackgroundHeadFile,
pdfBackgroundSubFile);
end
else
ShowMessage('ExportOffice not found in KJPDFExport.dll');
except
on e:Exception do
begin
ShowMessage(e.Message);
end;
end;
finally
FreeLibrary(lib);
end;
나는 C#을 함수로 전달하고 문자열의 모든 AnsiStrings 있습니다. 그들은 2007 버전의 프로젝트에서 단지 "문자열"이었기 때문에 AnsiString으로 변경했습니다.
나는 당황 스럽다. 몇 시간 씩 찾아 봤는데 문제를 찾을 수 없다.
C# 함수 서명과 Delphi 함수 서명을 모두 보지 않아도 특정 문제에 관해 알려주지는 못합니다. 우리가 무엇이 잘못되었는지 말할 수 있도록 두 가지를 모두 제공하십시오. 현재 코드는 이러한 유형이 무엇인지 알려주지 않습니다. –
ChangeFileExt는 ANSIString이 아닌 String을 반환합니다. –