Q&A

  • [질문] 비주얼베이직 Dll 을 델파이에 어떻게 적용하는지요? ㅠㅠ
아래와 같은 비주얼베이직에서 사용중인 DLL을 델파이로 사용할려고 합니다.
이지가지 많은 참고 자료를 찾아봐도 적용하기에 어렵네요.
아래의 소스는 비베의 DLL 선언과 사용입니다.

특히, ByRef handle As Long 이 부분은 델파이에서 어떻게 선언을 하고 사용을 해야 되는지가 가장 궁금하네요.  handle  값을 가져오는 부분이 되야 그 다음과정도 진행이 될것같은데요.

제가 작성한 코딩은
Function BS_OpenSocket( biostationAddr : String; port : LongInt;var handle : LongInt):LongInt; cdecl;  external 'BS_SDK.dll';

procedure TForm2.Button3Click(Sender: TObject);
var r :Int64;
  handle,
  biostationID : LongInt;
  port : Integer;
  tmp: String;
begin
   handle := 0;
  biostationID := 0;

  port := StrToInt(txtPort.Text) ;
  tmp  :=      txtIPAddress.Text;
  BS_InitSDK();
  BS_OpenSocket(tmp, port, Handle);
  BS_GetBiostationID(handle, biostationID);
  BS_CloseSocket(handle);
end;

지금까지 땀흘려 해본게 이런식으로 코딩을 해 봤지만, ... 답이 없네요.

아랫부분은 비베에 들어있는 소스입니다.
참고하셔서 좋은 답변 부탁드립니다.

//DLL 선언
Public Declare Function BS_InitSDK Lib "BS_SDK" () As Long
Public Declare Function BS_OpenSocket Lib "BS_SDK" (ByVal biostationAddr As String, ByVal port As Long, ByRef handle As Long) As Long
Public Declare Function BS_CloseSocket Lib "BS_SDK" (ByVal handle As Long) As Long
Public Declare Function BS_GetBiostationID Lib "BS_SDK" (ByVal handle As Long, ByRef biostationID As Long) As Long

//DLL 사용
Private Sub Command1_Click()
    Dim logRecord() As BSLogRecord
    
    result = BS_OpenSocket(txtIPAddress.Text, Int(txtPort.Text), handle)
    
    If result <> 0 Then
        Text1.SelText = "Cannot open the communication channel : " & result & vbCrLf
        Exit Sub
    End If
    
    result = BS_GetBiostationID(handle, biostationID)
    If result <> 0 Then
        Text1.SelText = "Cannot get the ID : " & result & vbCrLf
        If chkUSB.Value = 0 Then
            BS_CloseSocket (handle)
        Else
            BS_CloseUSBMemory (handle)
        End If
        Exit Sub
    End If
4  COMMENTS
  • Profile
    최용일 2010.07.08 04:01
    Function BS_OpenSocket( biostationAddr : PChar; port : LongInt;var handle : LongInt):LongInt; cdecl; external 'BS_SDK.dll';
  • Profile
    정민경 2010.07.09 00:15
    아~ 그렇군요.
    한가지만, 더 부탁 드립니다.

    펑션을 사용하는 법인데요.
    handle 값을 어떻게 처리하면 되나요.
    위 소스에 보면 BS_GetBiostationID(handle, biostationID) 와 같이 handle 값이 전달 되는것 같은데,
    이부분은 아래와 같이 하는건 가요. 요놈에 handle 를 어떻게 해야 될지요.^^~ ㅠㅠ

    var handle : longInt;
    begin

    result = BS_OpenSocket(txtIPAddress.Text, Int(txtPort.Text), handle)
    result = BS_GetBiostationID(handle, biostationID)

    end;
  • Profile
    최용일 2010.07.09 03:40
    글쎄요... 그런것은 매뉴얼을 보셔야죠.
    저 함수에 대한 매뉴얼을 보세요.
    저 함수에서 Handle을 어떻게 쓰는지는 알 수 없습니다. 뭔가 값을 설정해서 넘겨주는지, DLL에서 받아서 쓰는지 ... 다 매뉴얼에 나와 있겠죠...
  • Profile
    정민경 2010.07.13 14:39
    메뉴얼을 꼼꼼하게 봐야 겠군요. ^^
    감사해요~