Q&A

  • VC++6.0 DLL 연결
VC++6.0(MFC)로 작성된 DLL을 연결하고자 하는데 잘안되네요



VC++ code는

BOOL CT_Scan(LPCSTR lpszDate, LPCSTR lpszJobCode, LPCSTR lpszTel);

LPCSTR 는 charater pointer 입니다



Delphi에서는

implementation



function ct_scan(lpszDate,lpszJobCode,lpszTel:PChar):BOOL;

stdcall; external 'ctscan.DLL';



procedure TMainFm.ScnBtnClick(Sender: TObject);

begin

ct_scan(PChar(''), PChar(''), PChar(''));

end;



위의 코드를 Run시키면

"Unable to create process" 하고 실행이 안되요



참고적으로 window의 kernal32.dll은 연결됩니다



ctscan.dll이외의 다른 파일이 필요한 것인지 아니면 무엇이 문제인지

답변 부탁합니다.



또한가지 MFC가 아닌 간단한 message box부르는 VC++ DLL도 안되더군요

1  COMMENTS
  • Profile
    안치봉 1999.07.20 06:18
    안녕하세요.



    쩝, 제가 델파이때문에(?) C,C++ 을 해본지 하도 오래되어서 가물가물하긴 하지만 워낙 C,C++ 이 지랄(?) 같아서 선언같은걸 조심해서 잘 하셔야 할겁니다.



    extern "C" __declspec(dllexport) void CallMe();



    위와 같이 extern "C" 를 빼먹으면 일반적으로 C++ 용이름규칙으로 DLL 을 만듭니다.(일반씨와 C++ 의 라이브러리, DLL 파일에서 이름을 짓는 방법은 조금 틀립니다)

    때문에 델파이에서는 C++ 로 정의한 DLL 내부의 함수 CallMe 의 주소를 찾지 못해 그런 아우성을 친것 같습니다. 그래서 위와같이 C 용 DLL 이라는것을 선언을 해줘야 제대로 임포트하실수 있습니다.



    아래는 제가 테스트를 해본겁니다.(델파이 4, None Visual C++ 6.0)



    << MyDll.DLL >>



    #include



    extern "C" __declspec(dllexport) void CallMe();



    BOOL APIENTRY DllMain( HANDLE hModule,

    DWORD ul_reason_for_call,

    LPVOID lpReserved

    )

    {

    return TRUE;

    }



    void CallMe()

    {

    MessageBox(0, "1234", "test", MB_OK);

    }



    << Delphi Code >>



    type

    TForm1 = class(TForm)

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    procedure CallMe; stdcall; external 'MyDll.dll' name 'CallMe';



    var

    Form1: TForm1;



    implementation



    {$R *.DFM}



    procedure TForm1.Button1Click(Sender: TObject);

    begin

    CallMe;

    end;



    end.







    우미선 께서 말씀하시기를...

    > VC++6.0(MFC)로 작성된 DLL을 연결하고자 하는데 잘안되네요

    >

    > VC++ code는

    > BOOL CT_Scan(LPCSTR lpszDate, LPCSTR lpszJobCode, LPCSTR lpszTel);

    > LPCSTR 는 charater pointer 입니다

    >

    > Delphi에서는

    > implementation

    >

    > function ct_scan(lpszDate,lpszJobCode,lpszTel:PChar):BOOL;

    > stdcall; external 'ctscan.DLL';

    >

    > procedure TMainFm.ScnBtnClick(Sender: TObject);

    > begin

    > ct_scan(PChar(''), PChar(''), PChar(''));

    > end;

    >

    > 위의 코드를 Run시키면

    > "Unable to create process" 하고 실행이 안되요

    >

    > 참고적으로 window의 kernal32.dll은 연결됩니다

    >

    > ctscan.dll이외의 다른 파일이 필요한 것인지 아니면 무엇이 문제인지

    > 답변 부탁합니다.

    >

    > 또한가지 MFC가 아닌 간단한 message box부르는 VC++ DLL도 안되더군요