안녕하세요~~
- VC++ 원형 :
int Inquiry_Point(LPCTSTR A, LPCTSTR B, LPCTSTR C, LPCTSTR D, LPCTSTR E, CHAR* F)
- 델파이 : 아래와 같이 선언하고
TInquiry_Point= function(A,B,C,D,E,F:pchar):integer ; stdcall;
===============================================
var
Inquiry_Point := TInquiry_Point;
rData : pchar;
n : integer;
A,B,C,D,E ,rBuff : string;
begin
z := LoadLibrary('POS_OCBI.dll_TEST');
@Inquiry_Point := GetProcAddress(z,'Inquiry_Point');
try
Getmem(rData);
A := 'ddd'; B :='dddd'; C := 'ddd'; D := 'ddd'; E := 'ddd';
// *****아래 함수를 호출하면 메로리 엑세스 Violation이 발생됩니다
n := Inquiry_Point(pchar(A), pchar(B), pchar(C),pchar(D),Pchar(E),rData);
finally
Freemem(rData)
end;
end;
=================================================
=================================================
** 그런데 이상한건 Inquiry_Point Dll함수와 파라메터 수만 틀리고 동일한 data type의
함수호출에서는 메모리 에러가 발생되지 않습니다.
** Inquiry_Point 에러가 계속나서 혹 DLL이 문제가 있는가 싶어서
VB에서 구현을 해보았는데 VB에서는 메모리 없이 구현이 아주 잘 되네요..
난 당연히 델파이에서 안되는 것이라 VB에서도 안될거라 생각했는데..
그렇다면 델파이에서 함수 선언이나 , 함수 호출에 문제가 있는것 같습니다.
도움글 부탁 드릴께요..^^;
** 참고1 ***********************
TInquiry_Point= function(A,B,C,D,E:pchar; var F : byte ):integer ; stdcall; 로 선언하고
var
bRecive : array [0..1024] of byte;
----------------
n := Inquiry_Point(pchar(A), pchar(B), pchar(C),pchar(D),Pchar(E),bRecive[0]);
----------------
위와 같은 방법으로 시도 해보았는데 역시 메모리 에러가 발생되네요....
** 참고2 VB구현********************************
(BV에서 구현한 부분(메로리 에러 발생되지 않음)
- 비주얼베이직선언
Private Declare Function Inquiry_Point Lib "POS_OCBI.dll_REAL" (ByRef A As Byte, ByRef B As Byte, ByRef C As Byte, ByRef D As Byte, ByRef E As Byte, ByRef F As Byte) As Long
- 함수에서 사용할 변수 선언
Dim Ax() As Byte
Dim Bx() As Byte
Dim Cx() As Byte
Dim Dx() As Byte
Dim Ex() As Byte
Dim Fx(1024) As Byte
Dim str As String
- 함수 호출부
retVal = Inquiry_Point(Ax(0), Bx(0), Cx(0), Dx(0), Ex(0), Fx(0))