【发布时间】:2016-09-09 13:52:06
【问题描述】:
将我们的项目从 Delphi 2007 迁移到 XE6 后,我们不再能够正确调用我们构建的 C# dll 中的导出函数。 C# 代码似乎执行得很好,并且做了它应该做的事情,但是在它完成之后,它会引发访问冲突。
代码:
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。