C#调用 C++ Dll

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WinFormsApp1
{

    public partial class Form1 : Form
    {
        public const int DEVICE_USB = 0;
        public const int DEVICE_COM = 1;
        public const int DEVICE_UDisk = 2;

        public Form1()
        {
            InitializeComponent();
        }


        //[DllImport("jnalib.dll", EntryPoint = "GetVersionPtr")]
        //public static extern bool GetVersionPtr(ref OSINFO info);
        [DllImport("SynoAPIEx.dll", EntryPoint = "PSOpenDeviceEx")]
        public static extern int PSOpenDeviceEx(ref IntPtr pHandle, int nDeviceType, int iCom=1, int iBaud=1 ,int nPackageSize=2 ,int iDevNum=0);

        [DllImport("SynoAPIEx.dll", EntryPoint = "PSAutoOpen")]
        public static extern int PSAutoOpen(ref IntPtr pHandle, int type,int nAddr = 0, uint uPwd = 0x00,int bVfy=1);

        [DllImport("SynoAPIEx.dll", EntryPoint = "PSCloseDeviceEx")]
        public static extern int PSCloseDeviceEx(ref IntPtr pHandle);
        /*
        1.函数原型: int WINAPI PSOpenDeviceEx( 
        HANDLE* pHandle, //[OUT] 设备句柄
        int nDeviceType, //[IN] 设备类型,DEVICE_USB、DEVICE_COM、DEVICE_ UDisk
        int iCom=1, //[IN] 串口号 1~16
        int iBaud=1, //[IN] 波特率 1~n,其值*9600=实际波特率值
        int nPackageSize=2,//[IN] 数据包大小,实际数据包大小= 32*(0x01<<nPackageSize)
        int iDevNum=0); //[IN] 设备号,0~n
        函数说明:打开 PS 设备。 
        返回值: 成功-PS_OK; 
         * 
        2.函数原型: int WINAPI PSAutoOpen(
        HANDLE* pHandle, //[OUT] 设备句柄
        int* type, //[OUT] 设备类型,DEVICE_USB、DEVICE_COM、DEVICE_UDisk
        int nAddr = 0xFFFFFFFF, //[IN] 设备地址 
        UINT uPwd = 0x00, //[IN] 验证密码 
        int bVfy = 1); //[IN] 是否校验密码 0-不校验 1-校验

        函数说明:自动搜索打开 PS 设备。 
        返回值: 成功-PS_OK; 
        
        3 关闭设备
        函数原型: int WINAPI PSCloseDeviceEx( 
        HANDLE hHandle); //[IN] 设备句柄
        函数说明:关闭 PS 设备。 
        返回值: 成功-PS_OK; 
         */

        //加入获得Handle的API
        [DllImport("user32.dll")]
        internal static extern IntPtr WindowFromPoint(Point Point);

        //加入获得鼠标焦点的API
        [DllImport("user32.dll")]
        internal static extern bool GetCursorPos(out Point lpPoint);

        private void button1_Click(object sender, EventArgs e)
        {
            Point p; GetCursorPos(out p);
            IntPtr pHandle = WindowFromPoint(p);

            //uint type= DEVICE_USB;DEVICE_COM
            int nDeviceType = DEVICE_COM;//= new UIntPtr(&type);

            //var i = PSAutoOpen(ref pHandle, type,  0,  0x00,   0);

            var i = PSOpenDeviceEx(ref pHandle,  nDeviceType,  1,   1,   2, 0);
            Console.Write(i);
            label3.Text = i.ToString();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Point p; GetCursorPos(out p);
            IntPtr pHandle = WindowFromPoint(p);
            var i = PSCloseDeviceEx(ref pHandle);
            label3.Text = i.ToString();
        }

        /*
        检测手指并录取图像
        1.函数原型: int WINAPI PSGetImage( 
        HANDLE hHandle, //[IN] 设备句柄
        int nAddr); //[IN] 设备地址
        函数说明:检测手指并录取图像。 命令码 0x01 
        返回值: 成功-PS_OK; 
        */
        [DllImport("SynoAPIEx.dll", EntryPoint = "PSCloseDeviceEx")]
        public static extern int PSGetImage(ref IntPtr pHandle, int nAddr);
        private void button5_Click(object sender, EventArgs e)
        {
            Point p; GetCursorPos(out p);
            IntPtr pHandle = WindowFromPoint(p);
            var i = PSGetImage(ref pHandle,1);
            label3.Text = i.ToString();
            timer1.Enabled = true;
        }

        /*
        上传原始图像到 PC 
        函数原型: int WINAPI PSUpImage( 
        HANDLE hHandle, //[IN] 设备句柄
        int nAddr, //[IN] 设备地址
        unsigned char* pImageData, //[OUT]PC 数据缓存区,用于存储原始图像数据流。默认图像数据流为 256*288
        int* iImageLength); //[OUT]原始图像数据大小。(256*288)
        函数说明:上传原始图像到 PC。 
        返回值: 成功-PS_OK;
         */
        [DllImport("SynoAPIEx.dll", EntryPoint = "PSUpImage")]
        public static extern int PSUpImage(ref IntPtr pHandle, int nAddr,out Byte pImageData,out uint iImageLength);
        private void timer1_Tick(object sender, EventArgs e)
        {

        }
    }
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值