3일째로 들어서는군요..
하도 답답해서 질문 합니다. 불쌍한 중생을 구제해주세요 ㅡ.ㅜ
DLL이 하나 있습니다. 어떤 언어로 만들어졌는지는 잘 모르겠구요..
산업용 PC쪽 일 하시는 분들은 simens 라는 회사 아시려나 모르겠습니다.
전 잘 모릅니다. 우연찮게 그쪽 프로그램의 DLL을 이용해야 되는 경우가 생겼을뿐 ㅠ.ㅠ
해당 DLL에서 특정 함수를 사용하면 에러가 납니다.
일단, 샘플로 받은 VB 코드는 아래와 같습니다.
Dim dev_name As String
Dim vfd_name As String
Dim retval As Long
Public cp_descr As Long
dev_name = "CP_H1_1:"
vfd_name = ""
cp_descr = 12345678
retval = s7_init(dev_name, vfd_name, cp_descr)
s7_Init의 프로토 타입은
Declare Function s7_init Lib "s732std.dll" (ByVal cp_name As String, ByVal vfd_name As String, cp_descr_ptr As Long) As Long
제가 이것을 델파이로..
FDevName : String;
FVFDName : String;
FRetVal : LongInt;
cp_descr : Longint;
FDevName := 'CP_H1_1:';
FVFDName := '';
cp_descr := 12345678;
FRetVal := s7_init(FDevName, FVFDName, cp_descr);
함수 선언은
Function s7_init( cp_name : String; vfd_name : String; var cp_descr_ptr : Longint) : Longint; stdcall; external 's732std.dll'
이렇게 했습니다. 그리고 실행하면
msvcrt.dll의 78001D0B에서 AccessViolation 이 발생합니다.
read of address 00000000 이라고도 나오는군요 -_-;
msvcrt가 무슨 파일인가 찾아보니.. 어떤 분께서 C언어로 된 함수를 호출할 때 사용되는
dll이라고 하셨더라구요. 제가 생각하기엔 String을 인자로 넘겨주는 부분에서 문제가
되는 것이 아닌가 싶은데.. 이렇게 해봐도 저렇게 해봐도.. 계속 오류가 납니다..
델의 String은 기타 언어의 String과는 구조가 조금 다른것 같은데 그것 때문일까요.?
아니면 다른 이유가 있는 것일까요 ㅜ.ㅠ 삽질을 해볼만큼 해봤는데.. 함수 코드는
볼 수 없고, AccessViolation 만 나오니.. 답이 안나오네요 ㅠ.ㅠ
고수님들의 조언.. 기다립니다.. 시간도 많이 없는데 답답하군요 흑 ㅠ.ㅡ