Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[15169] Re:Re: 네. 그부분은 확인해보았습니다.
kylix [] 1993 읽음    2014-05-22 10:15
array of DataType 은 델파이만의 자료형입니다. string형처럼 자체적으로 메모리 관리를 하기 때문에, 다른 언어로 만들어진 DLL에서 사용하는 것은 좋지 않습니다.

배열의 크기가 명확하다면 아래와 같이 크기를 지정해서 사용하세요.
TResultArr = array[0..100] of TResultData;

그렇지 않다면 아래와 같이 선언해서 메모리 할당받으신 후에 사용하세요.
PResultArr = ^TResultArr ;
TResultArr = array[0..0] of TResultData;

앨리스 님이 쓰신 글 :
: 답변 감사드립니다. (__)
:
: 저도 일단 입력으로 넣는 배열이 메모리에 없어 생기는 문제로 생각하여
:
: 처음에 Count 만큼 가변배열을 만들어 입력했다가, Count 보다 많이 만들어 입력했다가, 전역에 고정 배열을
:
: Count 보다 많은 값으로 선언하여 입력했다가 등등을 확인해 보았습니다. 그런데도 에러가 계속 나네요. (....)
:
: 구조체에 들어가는 PChar 역시 StrAlloc 로 잡아도 보고 Alloclmem 으로 잡아도 보고 등등 해서 nil 이 없도록
:
: 신경을 썼는데도 계속 에러가 발생해서, 제가 DLL 을 포팅하는 방법이 잘못되었나 생각이 들어 질문글을 올려보게 되었습니다.
:
:
: 길이 님이 쓰신 글 :
: : Access Violation 오류는 거의 생성되있지않은공간을 이용하려고할때 발생합니다.
: :
: : 쉬운 예는
: : 배열의 크기를 3으로 생성해놓고, 4번5번째 배열을 사용하는경우 발생하죠...
: : 또 리스트박스에 항목이 1개만 추가도있는데 2번 항목을 어떠한 작업을 진행할경우 발생합니다.
: :
: : 혹시 모르니 참고만 하시길.............
: :
: : 앨리스 님이 쓰신 글 :
: : :
: : : 프로젝트를 진행하면서 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);
: : : 
: : : 로 그냥 구조체 하나만 넣었을때는 에러가 없지만, 그렇게는 쓸수가 없는 함수여서...
: : :
: : : C로 된 구조체에선 그냥 ResultData* 로 선언한것을 Allocmem 하고 각 배열에서 다시 각 필드를 allocmem
: : :
: : : 하여 그냥 넣게 되어있는데, 왜 델파이에선 똑같이 한다고 해봐도 다 에러가 나는 걸까요 ;ㅁ;
: : :
: : : 출장와서 셔츠하나를 4일째 입고 있으려니, 몸이 간질간질해서 내일은 꼭 집에 가고 싶네요 ;ㅁ;
: : :
: : : 아시는 분들의 도움을 부탁드립니다. ㅠ_ㅠ
: : :

+ -

관련 글 리스트
15166 Char* 를 멤버로 갖는 구조체를 입력해야하는 DLL을 호출하다 집에 못들어감 (...) 앨리스 2326 2014/05/22
15167     Re:Char* 를 멤버로 갖는 구조체를 입력해야하는 DLL을 호출하다 집에 못들어감 (...) 길이 2264 2014/05/22
15168         Re: 네. 그부분은 확인해보았습니다. 앨리스 2033 2014/05/22
15169             Re:Re: 네. 그부분은 확인해보았습니다. kylix 1993 2014/05/22
15170                 Re:Re:Re: 네. 그부분은 확인해보았습니다. 앨리스 2086 2014/05/22
15171                     Re:Re:Re:Re: 네. 그부분은 확인해보았습니다. kylix 2181 2014/05/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.