使用PInvoke.net

C#和C++的交互如果自己写代码,一方面繁琐,另一方面容易出错,再者就是代码不太规范。
最近看了一下PInvoke.net的东西,可以直接使用官方写好的。
下面是使用Pinvoke.net打开设备的一个例子。

        private void openDeviceButton_Click(object sender, RoutedEventArgs e)
        {

            var fileName = textBox.Text;
            MessageBox.Show(fileName);

            unsafe
            {
                fixed (char* p = fileName)
                {
                    // do some work
                    DeviceHandle = Kernel32.CreateFile(p, ACCESS_MASK.GenericRight.GENERIC_ALL, 0, (SECURITY_ATTRIBUTES*)0, CreationDisposition.OPEN_EXISTING, CreateFileFlags.FILE_ATTRIBUTE_SYSTEM, SafeObjectHandle.Null);
                }
            }

            if(DeviceHandle.IsInvalid)
            {
                var errCode = Marshal.GetLastWin32Error();
                MessageBox.Show($"not valid value, errCode = {errCode}");
                return;
            }

            MessageBox.Show("valid value");

        }
posted @ 2023-01-19 00:45  dewxin  阅读(64)  评论(0编辑  收藏  举报