Nach der Migration unseres Projekts von Delphi 2007 auf XE6 können wir eine exportierte Funktion in einer von uns erstellten C# -Dll nicht mehr ordnungsgemäß aufrufen. Der C# -Code scheint gut zu funktionieren und tut, was er tun soll, aber nachdem er fertig ist, löst er eine Zugriffsverletzung aus.Zugriffsverletzung beim Aufrufen der C# -Dll-Funktion von Delphi XE6
Der Code:
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;
Die Saiten, die ich auf die C# Funktion bin vorbei sind alle Ansistrings. Sie waren in der Version 2007 des Projekts nur "String" und ich habe sie daher in AnsiString geändert.
Ich bin verwirrt, ich habe Stunden gesucht und kann das Problem nicht finden.
Wir können Ihnen zu Ihrem spezifischen Problem nichts sagen, ohne die Signatur der C# -Funktion und die Signatur der Delphi-Funktion zu sehen. Bitte geben Sie beides an, damit wir Ihnen sagen können, was daran falsch ist. Momentan teilt uns Ihr Code nicht mit, um welche Typen es sich handelt. –
ChangeFileExt gibt String - Nicht ANSIString zurück. –