Q&A

  • 이중포인터 문제

C로 짜여진 DLL을 사용하려고 하는데, 델파이에서는 이중 포인터를 어떻게 쓰는지 몰라서
상당한 애를 먹고 있네요.

C함수 원형은 아래와 같습니다.

typedef usigned int     *TaskHandle;

int CreateTask (unsigned char name[], TaskHandle * taskHandle);

int StopTask (TaskHandle taskHandle);


위의 함수를 델파이에서 아래와 같이 선언하고 사용했습니다.

type
pUInt = ^Cardinal;
ppUInt = ^pUint;

Create = function (name:PChar; taskHandle:ppUInt);
Stop = function (taskHandle:pUInt);

..
.
.

var
hTask : pUInt;
.
.
begin
..
Create ('', @hTask);
.
.
.
Stop (hTask);


이렇게 하면 이중 포인터로 제대로 넘어 갈줄 알았는데, 안되는 군요.

델파이에서는 이중 포인터를 어떻게 사용해야 합니까?

TaskHandle 을 어떻게 델파이에서 정의 해야 할지 알려주셨으면 합니다.

좋은 답변 부탁 드리겠습니다.



2  COMMENTS
  • Profile
    도끼로이마까 2005.05.19 20:27

    함수 인자전달 문제인듯합니다.(Calling conventions)
    C함수와 파스칼함수는 함수에 인자를 전달할때 다른방법을 사용합니다.

    Create = function (name:PChar; taskHandle:ppUInt); cdecl;
    Stop = function (taskHandle:pUInt); cdecl;

    요렇게 해보세요.

    포인터문제는 아닌듯 생각됩니다...

  • Profile
    이중철 2005.05.19 02:32
    사용코드를 봐야 겠지만 그냥 함수형태가 참조형인것 같네요

    Create = function (name:PChar; var taskHandle: Cardinal);

    var
    hTask : Cardinal;
    begin
      Create('', hTask);
    end;

    그리고 실제로 C로 해당 Function을 쓴 예제가 있을텐데 그것을 포함해서 질문하여 주세요
    없으면 C의 융통성 땜시 엄청 애 먹습니다.
    TaskHandle * taskHandle <- 이런식으로 정의되어 있으면
    보통 3가지 방법으로 C에서 사용 합니다.
    1. 포인터으로만 사용
    2. 참조형 변수로 사용 (이것이라고 추측되어져서 올렸음)
    3. Array로 사용
    C는 꼭 사용하는 예제를 올려주셔야 합니다. 필히...

    그럼 이만...