一、Delphi 编写dll 中入口函数或过程后需要加stdcall修饰关键字;
C#中调用Delphi 编写的 DLL文件,采用非托管方式调用的,需要使用 [DllImport (....) ],若系统框架为".NET Framework 2.0以上,需要在解决方案属性中要将目标平台需要选择“ANY CPU”,同时勾选“首选32位”,才可正确调用,否则会出错。
DllImport属性用于指定包含外部方法的实现的dll位置。
(1)DllImport属性只能放在方法声明上。
(2)DllImport具有单个定位参数:指定包含被导入方法的dll名称的dllName参数。
(3)DllImport具有6个命名参数:
a、CallingConvention参数:指示入口点的调用约定,如果未指定CallingConvention,则使用默认值CallingConvention.Winapi;
b、CharSet参数:指示用在入口点种的字符集。如果未指定CharSet,则使用默认值CharSet.Auto;
c、EntryPoint参数:给出所声明的方法在dll中入口点的名称。如果未指定EntryPoint,则使用方法本身的名称;
d、ExactSpelling参数:指示EntryPoint是否必须与指示的入口点的拼写完全匹配。如果未指定ExactSpelling,则使用默认值false;
e、PreserveSig参数:指示方法的签名应被应当被保留还是被转换。当签名被转换时,它被转换为一个具有HRESULT返回值和该返回值的一个名为retval的附加输出参数签名。如果未指定PreserveSig,则使用默认值false;
f、SetLastError参数:指示方法是否保留Win32上的错误,如果未指定SetLastError,则使用默认值false。
DllImport是一次性属性类,而且用DllImport修饰的方法必须具有extern修饰符。
-----------------------------------------------------

本文介绍了如何在C#中调用Delphi 7创建的dll文件,强调了字符串传递的注意事项,如使用Pchar类型,并提供了具体的DllImport用法和示例代码。详细阐述了DllImport属性的各个参数以及调用约定,帮助开发者正确地进行跨语言调用。
最低0.47元/天 解锁文章
1578

被折叠的 条评论
为什么被折叠?



