将 DevicIOControl 与 VC 一起使用#
Using DevicIOControl with VC#
我创建了两个不同的 Visual C# dll,它们使用了 DeviceIOControl 调用,我将它们定义如下:
在第一个 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);
但现在我必须将它们作为同一个 class 中的单个 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);
作为通用定义,通过将结构体转换为字符数组来传递变量。但是驱动程序没有按预期工作
请指导我遵循正确的程序
方法重载就像@Hans Passant 指出的那样起作用
这意味着我可以在单个 .cs 文件中使用这两个定义,并且方法重载生效,允许使用具有不同参数的相同函数
我创建了两个不同的 Visual C# dll,它们使用了 DeviceIOControl 调用,我将它们定义如下:
在第一个 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);
但现在我必须将它们作为同一个 class 中的单个 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);
作为通用定义,通过将结构体转换为字符数组来传递变量。但是驱动程序没有按预期工作
请指导我遵循正确的程序
方法重载就像@Hans Passant 指出的那样起作用
这意味着我可以在单个 .cs 文件中使用这两个定义,并且方法重载生效,允许使用具有不同参数的相同函数