C로 짜여진 DLL에 있는 함수를 쓰는 델파이 프로그램을 작성하였습니다.
그런데 델파에서 포인터를 선언하고 함수의 파라미터로 넘깁니다.
그러면 C에 있는 해당함수가 배열을 만들고 그배열의 주소를 델파이로 아까파라미터로 넘긴 주소에 넣어줍으로써 델파이에 있는 포인터가 C 함수에서 만든 배열을 참조하도록 말입니다.
--------------------------------------------------------------------------------------------------------------------------------------------
델파이소스
p_record_no:PInteger;
GetResult(@p_record_no);
p_record_no[i]를 access하려면 메모리 에러가 납니다. C에서는 되는데...아궁..
C소스는
void GetResult(int **pnrecordno)
{
int a[10]={2,3,5,6,2,1,4,6,2,0};
pnrecordno=&a[0];
}
--------------------------------------------------------------------------------------------------------------------------------------------
델파이에서 포인터를 배열처럼 쓸수 없다는 말을 듣기는 했는데...
C함수에서 어차피 메모리를 할당받아서...그것의 주소만 델파이에서 참조해서 쓰려고 합니다.
가능 한지요? 알려주세요
C함수는 a라는 배열변수에 첫번째 주소를 반환합니다.
즉 p_record_no는 p_record_no의 첫번째 포인터의 주소입니다.
그러므로 p_record_no는 배열의 포인터이어야만 합니다.
type PIntegerArray = ^TIntegerArray;
TIntegerArray = array of integer;
var
p_record_no : PIntegerArray;
begin
GetResult(@p_record_no); <- 이거 GetResult(p_record_no) 이렇게 해야 될듯 하네요 쩝
p_record_no^[i];
TIntegerArray(p_record_no^)[i]; 안되면 이렇게..
^^