Q&A

  • c dll 호출..
염치불구하고 다시 여쭙습니다...
도무지 왜 안되는지 모르겠네요..~~

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

감사합니다..ㅠㅠ






1  COMMENTS
  • Profile
    김용덕 2004.07.28 00:36
    안녕하세요.
    델파이에서 함수 선언할 때 Calling Conversion이 안맞는것 같네요.
    export 될 때는 stdcall인데 델파이에서 import할 때는 cdecl이네요.
    이부분을 stdcall로 고쳐서 해보심이...
    즐프 하세요~