【问题标题】:Using DevicIOControl with VC# [closed]将 DevicIOControl 与 VC# 一起使用 [关闭]
【发布时间】: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


【解决方案1】:

方法重载就像@Hans Passant 指出的那样工作

这意味着我可以在单个 .cs 文件中使用这两个定义,并且方法重载生效,允许使用具有不同参数的相同函数

【讨论】:

    猜你喜欢
    • 2014-01-26
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 2013-12-18
    • 2014-02-09
    相关资源
    最近更新 更多