Я новичок в .NET compact framework. Мне нужно вызвать функцию DeviceIoControl и передать структуры в качестве входных и выходных параметров функции IOControl.NETCF как передать структуру по ссылке на DeviceIoControl
В PInvoke/DeviceIoControl Я нашел, как получить доступ к самой функции. Но как я могу передать указатель на структуру как InBuf
и OutBuf
параметр?
DeviceIoControl определяется как P/Invoke:
[DllImport("coredll", EntryPoint = "DeviceIoControl", SetLastError = true)]
internal static extern int DeviceIoControlCE(
int hDevice, int dwIoControlCode,
byte[] lpInBuffer, int nInBufferSize,
byte[] lpOutBuffer, int nOutBufferSize,
ref int lpBytesReturned, IntPtr lpOverlapped);
структуры в вопросе есть этот макет:
struct Query
{
int a;
int b;
char x[8];
}
struct Response
{
int result;
uint32 success;
}
void DoIoControl()
{
Query q = new Query();
Response r = new Response();
int inSize = System.Runtime.InteropServices.Marshal.SizeOf(q);
int outSize = System.Runtime.InteropServices.Marshal.SizeOf(r);
NativeMethods.DeviceIoControlCE((int)handle, (int)IOCTL_MY.CODE,
ref q, inSize, ref r, outSize, ref bytesReturned, IntPtr.Zero);
}
Редактировать: Когда я пытаюсь скомпилировать этот код я получаю ошибка:
cannot convert from 'ref MyNamespace.Response' to 'byte[]'
Как передать адрес структуры функции DeviceIoControl, которая ожидает указатель на байт вместо struct ref?
Крис, я включил код, чтобы проиллюстрировать, что я хочу, но пропустил актуальный вопрос. Теперь я надеюсь, что я вообще не назвал эту функцию, поскольку я получаю ошибки компилятора. – harper
Спасибо. Я проверю это, когда вернусь. Но функции ioctl предназначены для выполнения множества разных вызовов, зависящих от кода. Для каждого кода структура inBuf и outBuf может измениться. Поэтому для следующего кода мне нужен другой тип. C++ позволит объединить то, что C# не делает. Как мне обрабатывать различные типы in/outBuf? – harper
Используйте различные объявления P/Invoke, по сути, много перегрузок. Я обновляю свой ответ несколькими из Smart Device Framework. – ctacke