C#调用dll文件 动态链接库

cyloofts 2012-02-29 06:25:06
文件一共有三个:dcrf32.dll、dcrf32.h、dcrf32.lib
如果是VC++的人员编程的话就把dcrf32.lib加入到工程>设置 链接功能块就行了,他们就可以编其他功能了
可是小弟我只会编VC#。
------------------------------
下面是一些代码,我来请教各位大侠、高手们!!!
头文件dcrf32.h里:
#define uc unsigned char
extern "C"
{
//1.
HANDLE __stdcall dc_init(__int16 port,long baud);//链接串口,返回一个句柄
//2.
__int16 __stdcall dc_exit(HANDLE icdev);
//3.
__int16 __stdcall dc_config(HANDLE icdev,unsigned char _Mode,unsigned char _Baud);

... ...
解释一下:int dc_init(int port,long baud);
功 能:初始化通讯口
参 数:port:取值为0~19时,表示串口1~20;为100时,表示USB口通讯,此时波特率无效。
baud:为通讯波特率9600~115200
返 回:成功则返回串口标识符>0,失败返回负值,见错误代码表
例:int icdev;
icdev=dc_init(0,9600);//初始化串口1,波特率9600

----------------------------------------------------

dcrf32.dll文件没打开过。
-----------------------------------------------
我用C#调用,用以下方发会出现异常(“试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)”)。

但开始没有语法错误的

[DllImport("dcrf32.dll")]
public static extern IntPtr dc_init(int port,int baud); //short,int32我试了不行

private void button1_Click(object sender, EventArgs e)
{
IntPtr re = dc_init(100, 9600);//按按钮“链接串口”的时候出错了<-这句出错:试图加载格式不正确的

程序。
}


我的项目文件:http://download.csdn.net/detail/cyloofts/4100623 在我的资源里
这个问题挺有意思,大家具体分析一下
解决了可以发我邮箱2368421441#qq.com 交流交流
请大家指教,交流一下~
...全文
472 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
cyloofts 2012-05-09
  • 打赏
  • 举报
回复
解决了 就是因为我的电脑是64为系统,可能有编译的问题。换一台电脑或者换系统就没这个问题了[Quote=引用 10 楼 的回复:]

你好,您的问题解决了吗 我现在也遇到相同的问题不知道怎么解决
[/Quote]
yycaf 2012-03-29
  • 打赏
  • 举报
回复
08 r2 framework 4 和楼主一样的情况 修改为x86cpu类型 加载dll的问题解决了
[Quote=引用 8 楼 的回复:]

如果確定可以找的到.dll檔(因為您放在system32資料夾內,所以這樣宣告沒問題)
試試看下面這個代碼
[DllImport("dcrf32.dll", SetLastError = true, CallingConvention=CallingConvention.StdCall)]
public static extern IntPtr dc_init(Int16 port, ……
[/Quote]
kimtaehy 2012-03-21
  • 打赏
  • 举报
回复
你好,您的问题解决了吗 我现在也遇到相同的问题不知道怎么解决
lfqsy 2012-03-01
  • 打赏
  • 举报
回复
你这个东西怎么像的卡的设备啊,我有例子来找我
vinjent 2012-03-01
  • 打赏
  • 举报
回复
如果確定可以找的到.dll檔(因為您放在system32資料夾內,所以這樣宣告沒問題)
試試看下面這個代碼
[DllImport("dcrf32.dll", SetLastError = true, CallingConvention=CallingConvention.StdCall)]
public static extern IntPtr dc_init(Int16 port, Int32 baud);
因為你的代碼是32bit,所以你如果在64bit作業系統上測試會有問題,所以你可以在
屬性/建置/平台目標將Any CPU改為x86

Saleayas 2012-03-01
  • 打赏
  • 举报
回复
第一确认你有那个 DllImport的 DLL。
第二确认你的C# 程序运行平台是否和 DLL 一致,注意 AnyCPU 的问题。

cyloofts 2012-03-01
  • 打赏
  • 举报
回复
我更新了一下,问得更详细了一些
[Quote=引用 2 楼 zzzzv0 的回复:]

咋又发了个帖子啊
[/Quote]
cyloofts 2012-03-01
  • 打赏
  • 举报
回复
port:取值为0~19时,表示串口1~20;为100时,表示USB口通讯,此时波特率无效。
baud:为通讯波特率9600~115200
[Quote=引用 3 楼 doubleu2005 的回复:]

你动态链接声明的有问题吧,还有串口不用那么大吧
[/Quote]
cyloofts 2012-03-01
  • 打赏
  • 举报
回复
Windows/system32里有,还有Debug里可以复制一个。但是现在的问题不是找不到dcrf32.dll的问题。。。[Quote=引用 1 楼 kkzhangyu 的回复:]

你提供的项目文件分明是这样声明的:
[DllImport("dcrf32.dll", SetLastError = true, EntryPoint = "dc_init",CallingConvention=CallingConvention.Cdecl)]
public static extern IntPtr dc_init(Int32 port, Int32 baud……
[/Quote]
doubleu2005 2012-02-29
  • 打赏
  • 举报
回复
你动态链接声明的有问题吧,还有串口不用那么大吧
zzzzv0 2012-02-29
  • 打赏
  • 举报
回复
咋又发了个帖子啊
kkzhangyu 2012-02-29
  • 打赏
  • 举报
回复
你提供的项目文件分明是这样声明的:
[DllImport("dcrf32.dll", SetLastError = true, EntryPoint = "dc_init",CallingConvention=CallingConvention.Cdecl)]
public static extern IntPtr dc_init(Int32 port, Int32 baud);

还有你调试的时候你的DLL是放在哪个目录里?

110,534

社区成员

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

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

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