使用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");
}
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)