我的工程中有一个 PSam.dll 文件需要调用,是个的三方的DLL,使用C写的,用于将CE设备的串口打开。现在有一个让人郁闷的问题是使用DllImport导入PSam.dll中的函数后,程序运行时回显示异常“无法找到PInvoke DLL "PSam.dll"”我已经确认PSam.dll已经放到程序目录中了,Windows目录也试过了,但是都不好用!
#region 串口初始化函数
[DllImport("PSam.dll")]
public static extern int ARM_Uart0_Swith(Boolean Active); // 打开串口开关
[DllImport("PSam.dll")]
public static extern int SAM_InitDrv(IntPtr hWnd); // 开始设备驱动
[DllImport("PSam.dll")]
public static extern void SAM_CloseDrv(); // 停止设备驱动
const int SAM_SUCCESS = 0;
const int SAM_ERROR = -1;
const int SAM_COMM = -2;
const int SAM_REPLY = -3;
#endregion
#region 串口初始化函数
[DllImport("PSam.dll")]
public static extern int ARM_Uart0_Swith(Boolean Active); // 打开串口开关
[DllImport("PSam.dll")]
public static extern int SAM_InitDrv(IntPtr hWnd); // 开始设备驱动
[DllImport("PSam.dll")]
public static extern void SAM_CloseDrv(); // 停止设备驱动
const int SAM_SUCCESS = 0;
const int SAM_ERROR = -1;
const int SAM_COMM = -2;
const int SAM_REPLY = -3;
#endregion
首先分享下经验
1,文件头一定要有using System.Runtime.InteropServices;
2,不要使用添加引用的方式,使用DllImport方式加载
3,确保dll和应用程序都在同一个目录,且加载名称正确
4,确保接口函数的参数转换正确,你最好贴出C语言的dll接口,或者使用工具查看下dll接口如果以上你确保正确的话,我可以确保你应该是可以正常调用的。