当前位置:编程学习 > C#/ASP.NET >>

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文件吗,直接调用那里面的方法不行吗? --------------------编程问答-------------------- 你去百度搜下。很多的! --------------------编程问答--------------------
引用 3 楼 sky1989ss 的回复:
帮你顶一下了,你不是有别人写好的dll文件吗,直接调用那里面的方法不行吗?

麻烦问下如何调用呢能写一下吗?小弟是新手谢谢…… --------------------编程问答-------------------- 新建一个调用类,专门包装调用的方法,类里面的内容如2楼。
查阅DllImport类。 --------------------编程问答--------------------
引用 5 楼 a123641374 的回复:
引用 3 楼 sky1989ss 的回复:
帮你顶一下了,你不是有别人写好的dll文件吗,直接调用那里面的方法不行吗?

麻烦问下如何调用呢能写一下吗?小弟是新手谢谢……

嘿嘿 不好意思我也是新手
不过好像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#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,