Q&A

  • 델파이에서 C++로 만든 dll함수를 호출할때 문제가 생깁니다.
안녕하세요. 델파이와 표준 C++언어를 사용해서 프로그램을 제작중입니다.

일단 C++으로 dll파일을 만들었습니다. 거기에 다음과 같은 함수가 선언되어 있습니다.

<헤더>
extern "C" DLLIMPORT long CallbackTest(long pf(long value), long value);
<소스>
extern "C" DLLIMPORT long CallbackTest(long pf(long value), long value)
{
  return(pf(value));      
}


그리고 델파이 코드는 다음과 같습니다.
type
  TMethod = function(value: integer): integer;

function TestCallback(value: integer): integer;
begin
  ShowMessage('in TestCallback, value: ' + IntToStr(value));
  Result := value * 2;
end;

procedure TForm1.CallbackTestButtonClick(Sender: TObject);
var
  result: integer;
  Method: TMethod;
begin
  Method := TestCallback;
  result := CallbackTest(TestCallback, 2);
  ShowMessage('CallbackText result: 2 X 2 is ' + IntToStr(result));
end;

이렇게 해놓고 컴파일을 하면 델파이와 C++둘다 컴파일은 잘 됩니다.
그런데 막상 버튼을 눌러보면 ShowMessage('in TestCallback, value: ' + IntToStr(value))이 부분에서 value가 4530664같은 엉뚱한 값이 나옵니다.
ShowMessage가 실행되는 것으로 봐선 함수가 호출이 되기는 되는것 같은데요, 어떤 부분이 잘못되었는지 잘 모르겠습니다.

고수분들께서 도와주시면 정말 감사하겠습니다. 좋은 하루되세요.


1  COMMENTS
  • Profile
    류민철 2006.10.29 23:01
    TMethod = function(value: integer): integer;

    이문장에서...
    TMethod = function(value: integer): integer;cdecl;
    이렇게 해보시거나..
    TMethod = function(value: integer): integer;stdcall;
    이렇게...
    그럼 문제가 해결될거 같네요...
    구조적인 문제가 ... 하여간 이럼...
    그럼 즐코딩...