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도 안되더군요
쩝, 제가 델파이때문에(?) 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도 안되더군요