我正在尝试迁移在 C++ builder 中构建的应用程序。由于时间限制,我们的客户希望我们导入 VCL 功能,而不是查找 .net 等效项或创建新功能。
我试图 pinvoke rtl100.bpl 的 ExtractRelativePath 函数,它具有 AnsiString 作为返回和参数。然后我使用 IntPtr 来传递和获取字符串,但是在调用 API 时会发生 AccessViolationException。
这是来自 rtl100.bpl 的函数原型
PACKAGE AnsiString __fastcall ExtractRelativePath(const AnsiString BasrName, AnsiString DestName);
这就是我如何调用它。
[DllImport("rtl100.bpl", EntryPoint = "@[email protected][email protected]", CallingConvention = CallingConvention.Cdecl)]
Internal static extern IntPtr ExtractRelativePath(IntPtr BaseName, IntPtr DestName);
当然,我将使用 thr marshal 类分配和释放 intptrs。
问题是,delphi 库真的可以用在 c# 中吗?它的大部分 API 使用 AnsiString,这是一个原生的 delphi 字符串。或者我们应该开始考虑使用 .net 函数?
谢谢
您有多个问题:
AnsiString
是 Delphi 特定的类型,不能与其他工具链相互传递。 我认为您可能需要重新调整客户的期望。你正在尝试的是不可行的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句