我的工程中有一个 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

解决方案 »

  1.   

    本人最近也正在做些使用C#调用C++编写的dll.
    首先分享下经验
    1,文件头一定要有using System.Runtime.InteropServices;
    2,不要使用添加引用的方式,使用DllImport方式加载
    3,确保dll和应用程序都在同一个目录,且加载名称正确
    4,确保接口函数的参数转换正确,你最好贴出C语言的dll接口,或者使用工具查看下dll接口如果以上你确保正确的话,我可以确保你应该是可以正常调用的。
      

  2.   

    C写的dll,你要确保该dll支持你当前的操作系统。不是所有操作系统都通用的
      

  3.   

    既然是C写的DLL,你应该先用spy来查看一下这个DLL是否写的是正确的,如果spy能读出来就没问题,如果读不出来那么就是DLL有问题,
      

  4.   

    哎,这次是阴沟里翻船了……那个程序居然要使用MFC的库,但是那个该死的家伙告诉我他是用C写的……我也傻,就全信他了,都没用DllExplorer看一下……现在好了,我把MFC的库考过去就OK了!谢谢各位的热心帮助,嘎嘎