안녕하세요. 델파이와 표준 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가 실행되는 것으로 봐선 함수가 호출이 되기는 되는것 같은데요, 어떤 부분이 잘못되었는지 잘 모르겠습니다.
고수분들께서 도와주시면 정말 감사하겠습니다. 좋은 하루되세요.
이문장에서...
TMethod = function(value: integer): integer;cdecl;
이렇게 해보시거나..
TMethod = function(value: integer): integer;stdcall;
이렇게...
그럼 문제가 해결될거 같네요...
구조적인 문제가 ... 하여간 이럼...
그럼 즐코딩...