델파이에서 외부 프로그램을 불러 프로그램을 돌리는 방식을 쓰다가 너무 시간이 오래걸려 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;
}
//------------------------------------------------------------------------//
로 작성을 하고 돌렸더니 동일한 에러가 발생하고 있습니다.
어디가 문제인가요?