 |
假定你的VXD是采用OnW32DeviceIoControl来接受Delphi的控制。
VXD部分代码为:
DWORD TrandataDevice::OnW32DeviceIoControl(PIOCTLPARAMS pDIOCParams)
{
switch(pDIOCParams->dioc_IOCtlCode)
{
case 100:
char *s = (char*)pDIOCParams->dioc_InBuf;
strcpy(s, "Hello world!");
*(PDWORD)pDIOCParams->dioc_OutBuf = strlen("Hello world!");
*pDIOCParams->dioc_bytesret = 4;
break;
}
return 0;
}
Delphi部分的代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var hVxD:Thandle;
s: PChar;
b, nByte: integer;
begin
s := StrAlloc(200);
hVxD := CreateFile('\\.\TRANDATA.VXD', 0, 0, nil,
CREATE_NEW, FILE_FLAG_DELETE_ON_CLOSE, 0);
DeviceIoControl(hVxD, 100, s, sizeof(s),
@b, sizeof(b), nByte, nil);
CloseHandle(hVxD);
MessageBox(handle, s, 'Result', MB_ICONINFORMATION);
StrDispose(s);
end;
相关书籍:
《WINDOWS设备驱动程序技术内幕 》
《实用技术:WINDOWS NT与WINDOWS 2000设备驱动及开发》
《Windows 设备驱动程序(VXD 与 WDM)开发实务 含盘》
《虚拟设备驱动程序开发起步与进阶》
《WIN 9X虚拟设备驱动程序编程指南》
此问题由李海回答。
附加关键字:编程, 源程序, programming, source code, C/C++, MFC, C++ Builder, Borland C++, Turbo C, C, BCB, Delphi, VCL, Borland, DDK与硬件设备, hardware, ddk, vtoolsd, driver studio, winrt。
|