Q&A

  • 델파이에서 vxd를 호출할수 없나요?
안녕하세요.



vxd를 아시는 분이 계실꺼라 생각듭니다.



다름이 아니라 vxd를 델파이에서 사용할수 있는지 알고 싶어서



이렇게 질문을 올립니다.



좋은 답변기다리겠습니다.

1  COMMENTS
  • Profile
    이승원 2000.11.22 19:45
    안녕하세요.

    저 역시 vxd를 몇일째 자료를 찾고 있는데 별루 신통치 않습니다.

    제가 아는데 까지 답해 드릴께요.

    델파이에서도 물론 vxd가 동적로드가 가능합니다.

    동적으로 로드하려면 win32api인 CreateFile 을 씁니다.

    그리고 CreateFile로 얻은 핸들값을 DeviceIoControl이란 API를 사용해서

    vxd와 통신하게 초기화합니다.



    CreateFile은 많이 써 보셨겠죠.

    CreateFile로 Vxd의 핸들을 얻으려면 다음과같이 씁니다.



    hDevice = CreateFile('\.Vxdname.VXD', 0, 0, nil, 0, FILE_FLAG_DELETE_ON_CLOSE, nil);



    위의 함수를 보면 아무의미가 없는 대부분의 파라미터는 0로 되어있고

    FILE_FLAG_DELETE_ON_CLOSE는 CloseHandle을 호출할때 VMM이 자동으로

    Vxd를 언로드한다는것을 의미합니다.



    핸들값을 얻었으면 DeviceIoControl인터페이스를 구현해야 합니다.

    DeviceIoControl 의 원형은 다음과 같습니다.



    BOOL DeviceIoControl(Handle hDevice, DWORD code,

    LPVOID inbuf, DWORD cbinbuf,

    LPVOID outbuf, DWORD cboutbuf,

    LPDWORD pnout,

    LPOVERLAPPED lpovlap);



    이 호출에서 hDevice에 CreateFile로 얻은 핸들을 넘겨주고

    inbuf는 입력데이터를 포함하는 버퍼의 이드레스이고,

    outbuf는 드라이버에 의해 리턴되는 데이터의 바이트수를 의미하는 DWORD의 어드레스입니다. LPOVLAP파라미터는 윈 nt에서는 오버랩된 IO와 관계가 있으며 윈도95,98에서는 nil일수 있습니다.



    DeviceIoControl은 다음과 같이 씁니다.



    DeviceIoControl(hDevice, 2, &pBuf, sizeof(pBuf), nil, 0, nil, nil)



    이게 제가 vxd아는 전부입니다.

    많은 도움이 되지못해 죄송합니다. 나중에 더 알게 되면 그때 가르쳐 드릴께요.

    그럼 열심히 프로그래밍하시기 바랍니다.