日期:2014-05-18  浏览次数:21318 次

C#调用dll文件 动态链接库
文件一共有三个: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 交流交流
请大家指教,交流一下~

------解决方案--------------------
你提供的项目文件分明是这样声明的:
[DllImport("dcrf32.dll", SetLastError = true, EntryPoint = "dc_init",CallingConvention=CallingConvention.Cdecl)]
public static extern IntPtr dc_init(Int32 port, Int32 baud);

还有你调试的时候你的DLL是放在哪个目录里?
------解决方案--------------------
咋又发了个帖子啊
------解决方案--------------------
你动态链接声明的有问题吧,还有串口不用那么大吧
------解决方案--------------------
第一确认你有那个 DllImport的 DLL。
第二确认你的C# 程序运行平台是否和 DLL 一致,注意 AnyCPU 的问题。


------解决方案--------------------
如果確定可以找的到.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


------解决方案--------------------
你这个东西怎么像的卡的设备啊,我有例子来找我
------解决方案--------------------
你好,您的问题解决了吗 我现在也遇到相同的问题不知道怎么解决
------解决方案--------------------
08 r2 framework 4 和楼主一样的情况 修改为x86cpu类型 加载dll的问题解决了
探讨

如果確定可以找的到.dll檔(因為您放在system32資料夾內,所以這樣宣告沒問題)
試試看下面這個代碼
[DllImport("dcrf32.dll", SetLastError = true, CallingConvention=CallingConvention.StdCall)]
public static extern IntPtr dc_init(Int16 port, ……