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 부분 등에는 별 문제가 없는 것 같습니다.