다음과 같이 해결했습니다.
type
PUINT_PTR = ^UINT_PTR;
Tmy_func= function(cmd:PCHAR; args:PUINT_PTR; arg_cnt:longint): longint; stdcall;
C/C++ 만 쓰다가 파스칼을 쓸려니 어렵네요.
특히 C 모듈과 인터페이스하는 부분이 특히 더 어렵네요. C, 파스칼 양쪽 다 이해하고 있어야 되니.
MarunGuy 님이 쓰신 글 :
: 답변 감사합니다.
:
: 32비트,64비트에 따라 크기를 달리할려고 UINT_PTR 을 사용한 것 맞습니다.
: UINT_PTR 만 사용하면 컴파일은 잘 됩니다.
: 하고 싶은 것은 UINT_PTR에 대한 포인터 변수를 선언하는 것입니다.
:
: PINT64 이면 64비트 정수형 포인터를 선언하는 것 아닌가요?
:
: kylix 님이 쓰신 글 :
: : UINT_PTR 64bit에선 int64 32bit에선 integer입니다.
: :
: : type Tmy_func= function(cmd:PCHAR; args:PINT64; arg_cnt:longint): longint; stdcall;
: :
: : VC에서 디폴트는 cdecl 일겁니다.
: :
: : MarunGuy 님이 쓰신 글 :
: : : 다음과 같이 C 함수포인터 정의 를 파스칼 문법으로 변환하고 싶습니다.
: : : typedef int (*my_func)(const char *cmd, UINT_PTR *args, const int arg_cnt);
: : : 일단 다음과 같이 해보았는데 ^UINT_PTR 여기서 컴파일에러가 납니다.
: : : type Tmy_func= function(cmd:PCHAR; args:^UINT_PTR; arg_cnt:longint): longint; stdcall;
: : :
: : : 원 C소스는 vs2008 로 컴파일하고 있는데 위의 typedef 로대로 선언할 경우
: : : calling convention 을 stdcall 로 하는 것이 맞나요?
|