关于DllImport的问题

lmxmx 2011-06-24 04:32:03
我的工程中有一个 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


...全文
133 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lmxmx 2011-06-25
  • 打赏
  • 举报
回复
哎,这次是阴沟里翻船了……

那个程序居然要使用MFC的库,但是那个该死的家伙告诉我他是用C写的……

我也傻,就全信他了,都没用DllExplorer看一下……

现在好了,我把MFC的库考过去就OK了!

谢谢各位的热心帮助,嘎嘎
jy251 2011-06-24
  • 打赏
  • 举报
回复
既然是C写的DLL,你应该先用spy来查看一下这个DLL是否写的是正确的,如果spy能读出来就没问题,如果读不出来。。。那么就是DLL有问题,
遥望那些年 2011-06-24
  • 打赏
  • 举报
回复
C写的dll,你要确保该dll支持你当前的操作系统。不是所有操作系统都通用的
wqbyangtzeu 2011-06-24
  • 打赏
  • 举报
回复
本人最近也正在做些使用C#调用C++编写的dll.
首先分享下经验
1,文件头一定要有using System.Runtime.InteropServices;
2,不要使用添加引用的方式,使用DllImport方式加载
3,确保dll和应用程序都在同一个目录,且加载名称正确
4,确保接口函数的参数转换正确,你最好贴出C语言的dll接口,或者使用工具查看下dll接口

如果以上你确保正确的话,我可以确保你应该是可以正常调用的。

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧