Q&A

  • VC++에서 만든 DLL 호출관련
Programming Windows Fifth Edition Charles Petzold
라는 책의 21장 동적 연결 라이브러리의 간단한 DLL
이라는 항목의 예제를 VC++에서 컴파일해서(Win32 Dynamic Link-Library로 만든 DLL)
DLL을 만든다음 VC++에서 DLL 이 호출되어지는것을 확인한다음
델파이에서 DLL을 호출하니까
아래와 같은 메세지나 나옵니다.

"프로시저 시작지점 (제가 호출한 함수명)을 (VC++에서 만든 DLL화일명)에서 찿을 수 없습니다" 라는 에러 메세지가 나오네요

VC++ Wizard(MFC APP Wizard[dll])로 만든  일반DLL
(C,PASCAL,Delphi지원)만 델파이에서 호출이 가능한건 지요?
2  COMMENTS
  • Profile
    홍성락 2002.10.16 22:28
    C로 만드셨다면 대소문자를 가리므로 선언된 함수면과 인자개수가 정확히 맞으면 사용 가능할겁니다.
    문론 외부참조용으로 하셨겠지요.
    function AbCd(AAA: PChar): PChar; cdecl; external '1234.dll';
    hsr///////////////////////////////////////
  • Profile
    정희섭 2002.10.16 23:03
    /*-----------------------------------------

      EDRLIB.H  헤더파일
      ----------------------------------------*/

    #ifdef __cplusplus
    #define EXPORT extern "C" __declspec (dllexport)
    #else
    #define EXPORT __declspec (dllexport)
    #endif

    EXPORT BOOL CALLBACK EdrCenterText (HDC, PRECT, PCSTR) ;



    /*-----------------------------------------

         EDRLIB.C   ----------------------------*/


    #include <windows.h>
    #include "EDRLIB.H"

    int APIENTRY DllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
    {
            return TRUE;
    }

    EXPORT BOOL CALLBACK EdrCenterText(HDC hdc, PRECT prc, PCSTR pString)
    {
      int iLength;
      SIZE size;
      
      iLength = lstrlenA(pString);
      GetTextExtentPoint32A(hdc, pString, iLength, &size);
      return TextOutA(hdc, (prc->right - prc->left - size.cx) /2,
                               (prc->bottom - prc->top - size.cy) /2,
                                               pString, iLength);
    }



    --------------델파이 소스코드-----------------------------
    unit Unit1;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;

    type
      TForm1 = class(TForm)
        procedure FormPaint(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      Form1: TForm1;


    function EdrCenterText(hdc:HDC;prc:TRect;pString:PChar):boolean; cdcel; external 'EDRLIB.DLL';

    implementation

    {$R *.dfm}

    procedure TForm1.FormPaint(Sender: TObject);
    var
      Rect:TRect;
    begin
      Rect := Canvas.ClipRect;
      EdrCenterText(Canvas.Handle,Rect,PChar('text'));


    end;

    procedure TForm1.FormCreate(Sender: TObject);
    begin

    end;

    end.