Q&A

  • 기초적인 VC DLL 사용 문의드립니다.
안녕하세요~

현재 VC++로 짠 dll 파일을 델파이에서 구동해보려고 안간힘을 쓰고 있는 일인입니다.

원인은 잘 모르겠지만, 분명 제대로 인자를 넘겨줬다고 생각되는데 화면에 출력이 안되네요.
(VC++로 작성한 예제 프로그램은 잘만 돌아갑니다.ㅜㅜ)

프로그램이 잘 돌아간다면 이미지가 떠야되는데, 그냥 시커먼 화면만 뜨네요..

dc에 대해서 쬐금 공부를 했는데, 제가 놓친 부분이 있나 봅니다.

혹시 어디가 잘못되었는지 지적을 좀 부탁드려도 될까요?

extern "C" void FAR PASCAL EXPORT disp(RECT rc, HDC hDC);
extern "C" void FAR PASCAL EXPORT DispImgBuf(WORD *NewImg);
을 델파이에서
procedure disp(m_rcRect: TRect; pDC: HDC); stdcall; external 'aa.dll';
procedure DispImgBuf(NewImg: PWord); stdcall; external 'aa.dll';   <---이렇게 받았습니다.

그리고 VC로 작성한 소스가..

<!--CodeS-->
void CTESTDISPDlg::OnDispbuf()
{
    // TODO: Add your control notification handler code here
    RECT rc;
    rc.left = 0;    rc.top = 0;    rc.bottom = 500;    rc.right = 500;
    HDC hdc = ::GetDC(this->m_hWnd);
    DispImgBuf(m_IMGBUF);
    disp(rc, hdc);
    Invalidate(FALSE);
}
<!--CodeE-->

델파이로 작성한 소스가..

<!--CodeS-->
procedure TFormMain.sButton2Click(Sender: TObject);
var
  ImageDC: hDC;
  rect: TRect;
begin
  ImageDC := GetDC(Self.Handle);
  SetRect(rect,0,0,500,500);
  DispImgBuf(PImageBuf);
  disp(rect, ImageDC);
  ReleaseDC(0,ImageDC);
end;
<!--CodeE-->

DispImgBuf의 파라미터인 PImageBuf는 픽셀값이 들어간 PWord형이고, PImageBuf에 값은 정상적으로 들어갔습니다.
위와 같이 예제 소스가 있음에도 불구하고 델파이로 만들지를 못하겠네요...
어느 부분을 잘못한건지... 혹시 알 수 있을까요?
3  COMMENTS
  • Profile
    노정윤 2009.09.02 21:33
    제가 추가 질문하고 싶은 내용이 있군요.

    VC++ 의 RECT 형과 델파이의 TRect 형이 서로 호환가능한 형이었는지요?
    지금까지 일일이 int 4개로 분리해서 인자를 전달했었는데...
  • Profile
    김교신 2009.09.02 21:58
    델파이에 입문한지 얼마 되지 않아 그 부분에 대해선 확신이 없습니다.
    죄송합니다.^^;;;
    하지만.. 디버깅시 Local Variables로 본 결과로..
    rect: (8, 40, 695, 626, (8, 40), (695, 626))
    라고 나오더라구요.. 참고하세요~

  • Profile
    김교신 2009.09.03 04:33
    델파이의 TRect형과 VC++의 Rect형은 호환이 되는것으로 결과가 났습니다.