Q&A

  • DLL을 프로젝트에 넣는방법...
저는 C를 사용하여 DLL을 만들었습니다.

이걸 델파이에서 사용해야 하는데요.

어떻게 해야할까요?



저는 델파이 초보이구요...

책을 봐도 잘 모르겠어요...

DLL에 있는 함수를 이용하려고 하거든요...



고수님들의 조언부탁드립니다.



3  COMMENTS
  • Profile
    변인호 2001.06.01 02:48
    강명완 wrote:

    > 저는 C를 사용하여 DLL을 만들었습니다.

    > 이걸 델파이에서 사용해야 하는데요.

    > 어떻게 해야할까요?

    >

    > 저는 델파이 초보이구요...

    > 책을 봐도 잘 모르겠어요...

    > DLL에 있는 함수를 이용하려고 하거든요...

    >

    > 고수님들의 조언부탁드립니다.

    >



    아래의 예를 참조하세요..

    리턴값이 없는 함수는 Procedure로 선언하시고

    리턴값이 있는 함수는 function으로 선언하시면 됩니다.



    아래 { C++ Type function

    '

    '

    '

    }

    이 부분은 C에서 선언된 함수 원형입니다..





    unit WBoardDll;

    interface

    uses

    {$IFDEF WIN32}

    Windows;

    {$ELSE}

    Wintypes, WinProcs;

    {$ENDIF}



    { C++ Type function

    extern "C" _declspec(dllimport) void WBShow();

    extern "C" _declspec(dllimport) void ServerStart();

    extern "C" _declspec(dllimport) void ClientStart(char* ip);

    extern "C" _declspec(dllimport) void WBClose();

    }



    procedure WBShow;stdcall;external 'WBoard.dll'

    procedure ServerStart(x,y:PChar;wHandle:HWND);stdcall;external 'WBoard.dll'

    procedure ClientStart(x,y,ip:PChar;wHandle:HWND);stdcall;external 'WBoard.dll'

    procedure WBClose;stdcall;external 'WBoard.dll'

    function IsWBServer:boolean;stdcall;external 'WBoard.dll'

    implementation



    end.



    도움이 되셨으면 좋겠는데.. 저도 이런 문제로 무지 고생을 한적이 있어서..^^;

  • Profile
    강명완 2001.06.01 05:01
    죄송합니다만...

    한번 더 봐주시겠습니까?



    먼저 C로 작성된 DLL에서는 다음과 같이 선언하였습니다.

    extern "C" __declspec(dllimport) void Crypt(int EncType, char *InStr, char *OutStr);



    이때 델파이에서 선언해줄때...

    리턴값이 있는것은 function으로 하라고 하셨죠?

    그래서 다음과 같이 했습니다.



    { C++ type function

    extern "C" __declspec(dllimport) void Crypt(int EncType, char *InStr, char *OutStr);

    }



    function Crypt:String; StdCall; external 'des.dll'



    이게 맞나요?

    이건

    var과 implementation 사이에 작성하였습니다.



    함수가 여러개 있는데 중요한 함수는 Crypt하나입니다.

    다른 함수들도 다 선언해 주어야 하나요?

    델파이에서 부를 함수는 하나뿐인데...



    그리고, DLL안에 있는 함수를 사용할때...



    Crypt(EncType : Integer ; SrcStr, EncStr : String);



    이렇게 하면 되나요?

    이 Crypt 함수를 부르는 부분에서 에러가 납니다.



    이 DLL의 용도는 암호화 타입(0:암호화, 1:복호화)과 소스문자열(SrcStr), 결과가 들어갈 문자열( EncStr)입니다.



    질문이 좀 이상한가요?

    죄송하지만 한번만 더 조언해주세요...

  • Profile
    최용일 2001.06.01 05:21
    안녕하세요. 최용일입니다.



    하나의 함수만 필요하다면 하나의 함수만 선언해서 사용하시면 됩니다...



    델파이의 string과 C의 널종료문자열은 완전히 다른 구조의 자료형입니다...

    델파이에도 C의 널종료문자열과 같은 PChar란 형이 있습니다...

    그리고 리턴값이 void형인것은 procedure로 선언하셔야죠... void형 함수는 리턴값을 참조할 필요가 없는 함수입니다...



    interface



    ......

    procedure Crypt(EncType : Integer; InStr, OutStr: PChar); stdcall;

    ......



    implementation



    ......

    procedure Crypt; external 'des.dll' name Crypt;

    ......



    end.



    ^^ 항상 즐코하세요...



    강명완 wrote:

    > 죄송합니다만...

    > 한번 더 봐주시겠습니까?

    >

    > 먼저 C로 작성된 DLL에서는 다음과 같이 선언하였습니다.

    > extern "C" __declspec(dllimport) void Crypt(int EncType, char *InStr, char *OutStr);

    >

    > 이때 델파이에서 선언해줄때...

    > 리턴값이 있는것은 function으로 하라고 하셨죠?

    > 그래서 다음과 같이 했습니다.

    >

    > { C++ type function

    > extern "C" __declspec(dllimport) void Crypt(int EncType, char *InStr, char *OutStr);

    > }

    >

    > function Crypt:String; StdCall; external 'des.dll'

    >

    > 이게 맞나요?

    > 이건

    > var과 implementation 사이에 작성하였습니다.

    >

    > 함수가 여러개 있는데 중요한 함수는 Crypt하나입니다.

    > 다른 함수들도 다 선언해 주어야 하나요?

    > 델파이에서 부를 함수는 하나뿐인데...

    >

    > 그리고, DLL안에 있는 함수를 사용할때...

    >

    > Crypt(EncType : Integer ; SrcStr, EncStr : String);

    >

    > 이렇게 하면 되나요?

    > 이 Crypt 함수를 부르는 부분에서 에러가 납니다.

    >

    > 이 DLL의 용도는 암호화 타입(0:암호화, 1:복호화)과 소스문자열(SrcStr), 결과가 들어갈 문자열( EncStr)입니다.

    >

    > 질문이 좀 이상한가요?

    > 죄송하지만 한번만 더 조언해주세요...