C#如何调用dll实现对硬件的操作
我需要创建一个界面上面有几个按妞(比如提款机终端,我点读卡它就能读出机器内插的卡是什么样卡),我只需要调用别人写好的C语言DLL文件(这个DLL已经有了操作硬件的方法了),并且在C#里实现一下,请教各位如何实现?比如JS有ActiveXObject这个东西能操作,C#里有吗?如果各位知道麻烦提供一下源码,小弟分虽然不多但是很有诚心,谢谢各位 --------------------编程问答-------------------- 别沉 在线等! --------------------编程问答-------------------- 函数原型:DWORD HK_GetDevState (
IN LPCSTR szReaderName,
OUT DWORD *pdwState
);
我在C#中调用是这样写的
[DllImport( "HKAPI.dll ", SetLastError = true, ThrowOnUnmappableChar = true)]
public static extern IntPtr HK_ListReaders([Out, MarshalAs(UnmanagedType.LPArray, SizeConst = 1025)] byte[] pszReaderName, out int pdwReaderNameLen, out int pdwReaderNum);
[DllImport( "HKAPI.dll ", SetLastError = true, ThrowOnUnmappableChar = true)]
public static unsafe extern IntPtr HK_GetDevState(char* szReaderName, out int pdwState);
unsafe private void button1_Click(object sender, EventArgs e)
{
int len, num, lDevState;
IntPtr ret;
int i;
char* strReaderName;
byte[] pszReaderName = new byte[1025];
MsgList.Text = " ";
DevCombo.Text= " ";
num = 0;
//len = 1025;
len = pszReaderName.Length;
//枚举所有读卡器
ret = HK_ListReaders( pszReaderName, out len, out num);
if (ret.ToInt32() != 0)
{
MsgList.Items.Add( "枚举读卡器失败 ");
return;
}
//获取系统中存在的设备
i = 0;
while (pszReaderName[i] != 0x00)
{
strReaderName = (char*)pszReaderName[i];
ret = HK_GetDevState(strReaderName, out lDevState);
if (ret.ToInt32() != 0)
{
MsgList.Items.Add( "获取设备状态失败 ");
return;
}
if (lDevState == HGS_STATE_PRESENT)
{
DevCombo.Items.Add(strReaderName[i].ToString());//添加可用设备名称
};
i = i + strReaderName[i].ToString().Length + 1;
}
DevCombo.SelectedIndex = 0;
} --------------------编程问答-------------------- 帮你顶一下了,你不是有别人写好的dll文件吗,直接调用那里面的方法不行吗? --------------------编程问答-------------------- 你去百度搜下。很多的! --------------------编程问答--------------------
麻烦问下如何调用呢能写一下吗?小弟是新手谢谢…… --------------------编程问答-------------------- 新建一个调用类,专门包装调用的方法,类里面的内容如2楼。
查阅DllImport类。 --------------------编程问答--------------------
嘿嘿 不好意思我也是新手
不过好像2楼的是正解啊,先引用dll 如:
[DllImport( "HKAPI.dll ", SetLastError = true, ThrowOnUnmappableChar = true)]
public static extern IntPtr HK_ListReaders([Out, MarshalAs(UnmanagedType.LPArray, SizeConst = 1025)] byte[] pszReaderName, out int pdwReaderNameLen, out int pdwReaderNum);
// 再运用 方法 -- HK_ListReaders() 看他都用什么参数 提供给他就ok
--------------------编程问答-------------------- 飘过 下来看看
补充:.NET技术 , C#