염치불구하고 다시 여쭙습니다...
도무지 왜 안되는지 모르겠네요..~~
int __export __stdcall MBOX_Connection(void);
int __export __stdcall Read_PSN(char* psn);
int __export __stdcall MBOX_Terminate (void);
위와 같은 c header 파일이 있는데, 이걸 delphi에서 호출에 사용할려고,
function MBOX_Connection() : integer; cdecl; external 'MTI_PSNRead.dll';
Function Read_PSN(Psn : pchar) : integer; cdecl; external 'MTI_PSNRead.dll' ;
function MBOX_Terminate() : integer; cdecl; external 'MTI_PSNRead.dll';
이렇게 바꿨습니다.
그리고,
var
a: integer;
begin
a:= mbox_connection();
해서 call 하는데, 정상적이라면, a에 0이 나와야 하는데, fail났을시 -1이 나옵니다. 도무지 원인을 모르겠네요..
c header file이 잘못 됐을수도 있나요..???
비베 소스를 보면
Declare Function MBOX_Connection Lib "MTI_PSNRead.dll" () As Long
Declare Function Read_PSN Lib "MTI_PSNRead.dll" (ByVal x1$) As Long
Declare Function MBOX_Terminate Lib "MTI_PSNRead.dll" () As Long
선언하고,
Private Sub Cmd_ClearPSN_Click()
Lab_PSN.Caption = ""
End Sub
Private Sub Cmd_ReadPSN_Click()
Dim status As Integer
Dim psn As String * 9
status = Read_PSN(psn)
Lab_PSN.Caption = psn
End Sub
Private Sub Form_Load()
Dim status As Integer
status = MBOX_Connection()
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim status As Integer
status = MBOX_Terminate()
End Sub
게 이용하는데, 전혀 이상없거든요...
도무지..모르겠네요...
아시는분 꼭 좀 답변이나 메일 보내주시면 너무 고맙겠습니다. ㅠㅠ
jeankook@empal.com
감사합니다..ㅠㅠ
델파이에서 함수 선언할 때 Calling Conversion이 안맞는것 같네요.
export 될 때는 stdcall인데 델파이에서 import할 때는 cdecl이네요.
이부분을 stdcall로 고쳐서 해보심이...
즐프 하세요~