Q&A

  • 포인터 쓰는 법 좀 알려주세요
C에서 작성된 Dll을 사용해야 합니다.
해당 DLL에 대한 VB 샘플이 포함되어 있어서 그걸 보며 작업을 하는 중입니다.
근데...  델파이에서 포인터 쓰는 법을 잘 모르겠습니다.
예전 글들도 검색은 해봤습니다만 여전히 모르겠습니다.  (허접해서 죄송...   ㅠ.ㅠ)


다음은 샘플로 제공된 VB 소스에서 해당 Dll의 함수를 사용하는 부분입니다.

- 함수의 매개변수로 사용될 구조체 선언
Public Type RCB_TYPE
    MagicNumber As Long
    hComm As Long
    status As Long
    lastError As Long
End Type

Public Global_RCB As RCB_TYPE

- dll 함수 Export
Declare Function ReaderCommOpen Lib "ReaderComm5DLL.dll" (lpRCB As RCB_TYPE, ByVal lpComPort As String, ByVal baud_rate As Long) As Integer

- 구조체 멤버 설정 및 함수 호출
Global_RCB.hComm = 12345657
Global_RCB.MagicNumber = 111

ReaderCommOpen(Global_RCB, "TCP/IP", 0)


이걸 Delphi에 적용하기 위해 다음과 같이 작성했더니 함수 호출 부분에서 Access violation...    ㅜ.ㅜ

- 구조체 및 dll 함수의 원형 선언
interface
type
  RCB_TYPE = record
    MagicNumber, hComm, status, lastError : Longint;
  End;

  Function ReaderCommOpen (lpRCB : RCB_TYPE; lpComPort : String; baud_rate : Longint): Integer;

implementation
  Function ReaderCommOpen; external 'ReaderComm5DLL.dll';

- 구조체 멤버 설정 및 함수 호출
Global_RCB.MagicNumber := 111;
Global_RCB.hComm := 12345657;

ReaderCommOpen(Global_RCB, 'TCP/IP', 0);


보시면 VB용 소스에서는 함수의 첫번째 매개변수인 Global_RCB가 포인터로 사용되었는데...
Delphi로 작성하면서는 일반 변수로서 취급하니 당연히 에러가...

어딜 어떻게 바꾸어야 되는지 좀 알려주세요.

ps : 해당 DLL에 포함된 함수들 중 (포인터를 매개 변수로 사용하지 않는) 다른 함수들은 제대로 동작하는걸 보면 Export 부분 등에는 별 문제가 없는 것 같습니다.
0  COMMENTS