注册 登录
编程论坛 C# 论坛

是不是所有的dll都可以被c#调用?

wyc199288 发布于 2014-01-20 22:23, 805 次点击
最近在编一个c#的程序,需要显示外部采集卡的信息,不过外部的那个采集卡厂商提供了一个dll文件可以被调用,只有VB,c的例程。例程里面参数大多是句柄,不知道那个dll文件c#是不是可以调用?并且问一下,是不是所有的dll,都可以被c#,c,vb这种语言调用?

多谢各位提点!
8 回复
#2
wp2319572014-01-21 05:47
应该可以
#3
wangnannan2014-01-21 08:28
这个不一定 dllimport这种方式如果不支持的话 那就是不支持了
#4
wyc1992882014-01-21 10:23
回复 3楼 wangnannan
原来那个dll可以被c调用,不知道c#是否可以?
#5
wyc1992882014-01-21 10:24
回复 2楼 wp231957
原来那个dll可以被c调用,不知道c#是否可以?stdcall的
#6
wangnannan2014-01-21 10:54
        [DllImport("ecg2jpg.dll")]
        private static extern int ecg2jpg(string ecgPath, string jpgPath);
抛砖引玉 你可以照我写的这个例子试试 只有自己试了才知道 不懂要及时发帖 版主都会帮助你
#7
wyc1992882014-01-21 12:06
回复 6楼 wangnannan
我就是已经编过了才发问的。
再问一下:我的那个dll是厂家提供的,在c中可以调用,是这样声明的:extern "C" HANDLE __declspec(dllimport)  __stdcall MP425_OpenDevice(long dev_num);
extern "C" long __declspec(dllimport)  __stdcall MP425_CloseDevice(HANDLE hDevice);
分别一个是打开设备,一个是关闭设备。参数都涉及到句柄。

但是我在c#中也是按你的方式调用却总是没反应(注:c中已经成功调用。)  我想是句柄的原因,在c中的handle在c#中是对用intptr还是int?
大神求解答,多谢!
#8
wangnannan2014-01-21 14:00
IntPtr 可以用IntPtr 代替int

例如这样
程序代码:
调用API 函数SendMessage 发送WM_CLOSE 消息。


DllImport("User32.dll",EntryPoint="SendMessage")]

  

private static extern int SendMessage( int hWnd,int Msg,int wParam,int lParam);

  

const int WM_CLOSE = 0x10;  

SendMessage(那个程序的窗口句柄, WM_CLOSE, 0, 0);


 

[ 本帖最后由 wangnannan 于 2014-1-21 14:02 编辑 ]
#9
wyc1992882014-01-22 12:14
回复 7楼 wyc199288
经过大神指导,我顿悟了!多谢!
1