Q&A

  • C++ Builder로 만든 DLL을 돌리는데 에러가... --;


델파이에서 외부 프로그램을 불러 프로그램을 돌리는 방식을 쓰다가 너무 시간이 오래걸려 C++로 만들어진 프로그램을 C++ Builder에서 DLL로 변환을 했답니다.



컴파일상에서 아무런 에러도 없고 원하던 DLL이 만들어지더군요.



그것을 델파이상에서 호출해서 쓰려고 하니까 에러가 뜹니다.



물론 델파이상의 컴파일에서도 문제가 없었는데...



에러명칭은 "Unable to create process"입니다.



어디가 문제인가요?



C++ builder 상에는 extern "C" __stdcall Boolean CompressJob() 이라고 함수 선언을 했고.

델파이 상에는 function CompressJob:Boolean; stdcall; external 'Compress.dll'; 이라고 선언을 했습니다.



왜 이런 문제가 발생하는지 모르겠내요.



에러 이유를 알려주셨으면... ^^;



문제를 찾아보려고 간단하게 프로그램을 짜봤답니다.

숫자를 입력받아 두배의 값을 화면에 나타내는 건데...

델파이에서는



//------------------------------------------------------------------------//

interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls;



type

TForm1 = class(TForm)

Button1: TButton;

Edit1: TEdit;

Edit2: TEdit;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;



var

Form1: TForm1;



implementation



{$R *.DFM}

function DV(N: Integer): Integer; stdcall; external 'C_Sample.dll';



procedure TForm1.Button1Click(Sender: TObject);

var

x, y: Integer;

begin

x := StrToInt(Edit1.Text);

y := DV(x);



Edit2.Text := IntToStr(y);

end;



end.

//------------------------------------------------------------------------//



C++ Builder에는

//------------------------------------------------------------------------//

//---------------------------------------------------------------------------



#include

#include

#pragma hdrstop



extern "C" __stdcall int DV(int N);



#pragma argsused

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)

{

return 1;

}

//---------------------------------------------------------------------------



int __stdcall DV(int N)

{

int V;

V = N*N;

return V;

}

//------------------------------------------------------------------------//



로 작성을 하고 돌렸더니 동일한 에러가 발생하고 있습니다.



어디가 문제인가요?



0  COMMENTS