【发布时间】:2023-03-08 06:38:01
【问题描述】:
我创建了两个使用 DeviceIOControl 调用的不同 Visual C# dll,我将它们定义如下:
在第一个 dll 中:
[DllImport("kernel32.dll", SetLastError = true)]
static extern BOOL DeviceIoControl(
HANDLE hDevice,
DWORD dwIoControlCode,
ref Internal_COMMAND lpInBuffer,
DWORD nInBufferSize,
ref ulong lpOutBuffer,
DWORD nOutBufferSize,
ref DWORD lpBytesReturned,
LPOVERLAPPED lpOverlapped);
public struct Internal_COMMAND
{
public ulong Address;
public ulong Command;
};
在第二个 dll 中:
[DllImport("kernel32.dll", SetLastError = true)]
static extern BOOL DeviceIoControl(
HANDLE hDevice,
DWORD dwIoControlCode,
ref char[] lpInBuffer,
DWORD nInBufferSize,
ref char[] lpOutBuffer,
DWORD nOutBufferSize,
ref DWORD lpBytesReturned,
LPOVERLAPPED lpOverlapped);
但现在我必须将它们作为同一个类中的单个 dll。所以我尝试使用下面的。
[DllImport("kernel32.dll", SetLastError = true)]
static extern BOOL DeviceIoControl(
HANDLE hDevice,
DWORD dwIoControlCode,
ref char[] lpInBuffer,
DWORD nInBufferSize,
ref char[] lpOutBuffer,
DWORD nOutBufferSize,
ref DWORD lpBytesReturned,
LPOVERLAPPED lpOverlapped);
作为通用定义并通过将结构转换为字符数组来传递变量。但是驱动没有按预期工作
请指导我遵循正确的程序
【问题讨论】:
-
不发布重要的代码到底有什么意义?把那个代码扔掉,它已经坏了,完全没有必要。 C# 语言支持方法重载,当它们具有属性时也能正常工作。
-
@HansPassant 嗨...正如你所说的那样工作我使用了方法重载...抱歉这么愚蠢
标签: c# deviceiocontrol