因为要做工控,购买了北京科瑞的KPCI-847八路板卡(同时提供了名为:kpci800.dll的动态链接库),由于厂家只提供了C++和VB的示例代码,而本人只会C#,想请教各位有否懂这两门的帮帮忙转换一下,如:打开指定设备函数
Visual C++ & C++Builder:
BOOL WINAPI OpenmDevice(ULONG iIndex,ULONG boardtype)
Visual Basic:
Declare Function OpenDevice Lib "kpci800.dll" (ByVal iIndex As Long,ByVal boardtype)
As Boolean
功能: 该函数负责打开指定板卡型号的设备对象
参数: iIndex 指定KPCI板卡的设备序号,0对应第一个设备
boardtype 指定KPCI板卡的型号,这里只能是840、843、844、845、846、847、848。
返回值:“1”表示成功,“0”代表失败。从I/O端口读入一个字节
Visual C++ & C++Builder:
UCHAR WINAPI ReadByte(ULONG iIndex ,UCHAR dich)
Visual Basic:
Declare Function ReadByte Lib "kpci800.dll" (ByVal iIndex As Long,
ByVal dich As Byte)
As Byte
功能: 从端口读入一个字节
参数: iIndex 与OpenDevice中的相同
dich 为开关量输入的地址
返回值:读取的单字节数据
关于打开指定设备函数,我自己试着用以下的C#语句但会报错:[DllImport("kpci800.dll")]
private static extern bool winapi OpenmDevice(Int32 iIndex, Int32 boardtype); //此句报错:"应输入;"我已经将厂家提供的kpci800.dll文件放在了项目的bin/debug文件夹内了。请懂行者将上面两个VC++的声明语句帮我转成C#形式的好吗?谢谢了!
Visual C++ & C++Builder:
BOOL WINAPI OpenmDevice(ULONG iIndex,ULONG boardtype)
Visual Basic:
Declare Function OpenDevice Lib "kpci800.dll" (ByVal iIndex As Long,ByVal boardtype)
As Boolean
功能: 该函数负责打开指定板卡型号的设备对象
参数: iIndex 指定KPCI板卡的设备序号,0对应第一个设备
boardtype 指定KPCI板卡的型号,这里只能是840、843、844、845、846、847、848。
返回值:“1”表示成功,“0”代表失败。从I/O端口读入一个字节
Visual C++ & C++Builder:
UCHAR WINAPI ReadByte(ULONG iIndex ,UCHAR dich)
Visual Basic:
Declare Function ReadByte Lib "kpci800.dll" (ByVal iIndex As Long,
ByVal dich As Byte)
As Byte
功能: 从端口读入一个字节
参数: iIndex 与OpenDevice中的相同
dich 为开关量输入的地址
返回值:读取的单字节数据
关于打开指定设备函数,我自己试着用以下的C#语句但会报错:[DllImport("kpci800.dll")]
private static extern bool winapi OpenmDevice(Int32 iIndex, Int32 boardtype); //此句报错:"应输入;"我已经将厂家提供的kpci800.dll文件放在了项目的bin/debug文件夹内了。请懂行者将上面两个VC++的声明语句帮我转成C#形式的好吗?谢谢了!
解决方案 »
- C#导出excel 在原有行中间插入一行怎么做?
- 为何在IE下就可以正常照片,在谷歌游览器就显示错误
- C#下拉列表与ListBox相关问题 谢谢请教
- SharePoint的配置问题
- 很有趣的问题:如何把形如a="meth("parameter1",parameter2,"parameter3")"的字符串变为方法
- 主进程结束时如何结束他相关的所有线程????
- 听说这道题……很不好搞
- 结构体初始化在c#里。。。帮忙!!!应该比较简单的问题吧!!
- 关于float类型,很简单!·
- 谁有ComponentOne Studio for .NET组件包的注册码
- iis无法访问虚拟目录下的文件
- c#生成安装文件,如何将数据库也加入到安装文件中
private static extern bool OpenmDevice(Int32 iIndex, Int32 boardtype);
先分析这个函数:
参数1:ULONG iIndex,一个unsigned long(无符号长整数),传入参数,用于指定设备序号
参数2:ULONG boardtype,一个unsigned long(无符号长整数),传入参数,用于指定设备型号,这里应该是847返回值:int,0表示失败,1表示成功
winapi是函数参数入栈顺序修饰符(__stdcall),在Dll中声明的时候使用,调用的时候不要带上了有了上面这些信息下手就容易了:
[DllImport("kpci800.dll")]
private static extern int OpenmDevice(unsigned long iIndex, unsigned long boardtype);unsigned long index = 0;
unsigned long boardtype = 847;
int result = OpenmDevice(index, boardtype);
Console.WriteLine(result)
先把result搞成1再进行下一步