프로젝트를 진행하면서 DLL 파일을 하나 써야할 일이 생겼습니다.
struct ResultData
{
Double No;
char* name;
char* value;
char* min
cahr* max;
};
int Upload(int Id, char* sessionName, int DataSize , struct ResultData* ResultDataArray, char* ErrCode);
대략 이런형식의 함수인데요. 결과값을 구조체에 넣어 배열형태로 DLL에 넣어야 하여,
TResultData = Record
No : Double;
Name : PChar;
Value : Pchar;
min : Pchar;
max : Pchar;
end;
TResultArr = Array of TResultData;
function upload(ID:Integer;sessionName:Pchar;DataSize:Integer;var ResultData:TResultArr; var ErrCode:PChar);
이런식으로 포팅하여 실행해보았는데요.
Access Violation 이 나면서 집에 들어가지 못하게 된 상황이 발생하였습니다. (...)
구조체로 입력하는 부분이 없는 다른 함수들은 잘 실행이 되는데, 구조체로 값을 입력해야 하는
저 함수만 실행하면 에러가 박박박 뜨네요. ;ㅁ;
TResultArr 를 ^TResultArr 하여 PResultArr 로 만들어 넣어도 보고, 포인터 변수로 넣어도 보고
ResultData를 포인터로 바꿔도 넣어보고 등등 별짓을 다 해봤는데, 몽땅 에러가 나구요 (...)
function upload(ID:Integer;sessionName:Pchar;DataSize:Integer;var ResultData:TResultData; var ErrCode:PChar);
로 그냥 구조체 하나만 넣었을때는 에러가 없지만, 그렇게는 쓸수가 없는 함수여서...
해당 DLL의 예제가 C로 작성되어 있는데, 해당 예제에서는 그냥 ResultData* 로 선언한것을 Allocmem 하고
각 배열에서 다시 각 필드를 allocmem 하여 그냥 넣게 되어있는데, 왜 델파이에선 똑같이 한다고 해봐도 다 에러가 나는 걸까요 ;ㅁ;
출장와서 셔츠하나를 4일째 입고 있으려니, 몸이 간질간질해서 내일은 꼭 집에 가고 싶네요 ;ㅁ;
아시는 분들의 도움을 부탁드립니다. ㅠ_ㅠ
|