プロジェクトを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#関数に渡していた文字列は、すべてのAnsiStringです。以前は2007年版のプロジェクトでは "文字列"だったので、AnsiStringに変更しました。
私は困惑しており、何時間も探していて問題を見つけることができません。
C#関数シグネチャとDelphi関数シグネチャの両方が表示されていない場合、特定の問題については何も伝えられません。両方の情報を入力して、何が間違っているか教えてください。現在のところ、あなたのコードは、これらがどのような型であるかを教えてくれません。 –
ChangeFileExtはANSIStringではなくStringを返します。 –