Я хочу, чтобы порт 0xE020 (Hex -> Dec = 57.376), но он за границей для краткости. Теперь мне это нужно, чтобы протестировать параллельные порты расширения PCI-E.Можно ли адресовать высокие порты Inpout32.dll?
Благодаря ответ на этом вопросе (https://stackoverflow.com/a/4618383/3391678) я использую следующий рабочий код для 32-битных сред:
using System;
using System.Runtime.InteropServices;
namespace LPTx86
{
public class LPT
{
//inpout.dll
[DllImport("inpout32.dll")]
private static extern void Out32(short PortAddress, short Data);
[DllImport("inpout32.dll")]
private static extern char Inp32(short PortAddress);
private short _PortAddress;
public LPT(short PortAddress)
{
_PortAddress = PortAddress;
}
public void Write(short Data)
{
Out32(_PortAddress, Data);
}
public byte Read()
{
return (byte)Inp32(_PortAddress);
}
}
}
И для 64 битных сред:
using System;
using System.Runtime.InteropServices;
namespace LPTx64
{
class LPT
{
[DllImport("inpoutx64.dll", EntryPoint = "Out32")]
private static extern void Out32_x64(short PortAddress, short Data);
[DllImport("inpoutx64.dll", EntryPoint = "Inp32")]
private static extern char Inp32_x64(short PortAddress);
private short _PortAddress;
public LPT64(short PortAddress)
{
_PortAddress = PortAddress;
}
public void Write(short Data)
{
Out32_x64(_PortAddress, Data);
}
public byte Read()
{
return (byte)Inp32_x64(_PortAddress);
}
}
}
(Да, я извлекал каждый элемент безопасности и проверка работоспособности, мое второе имя - «Опасность»;))
Возможно ли, и как я могу указать порты, которые не вписываются в короткий?
Используйте 'ushort', чтобы получить ах ead, номер порта не является знаковым значением. –
Я заглянул в файлы заголовков и да, это ухорт, я лучше исправлю это, пока что-то не сломается ... –