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
[15168] Re: 네. 그부분은 확인해보았습니다.
앨리스 [babelfish] 2033 읽음    2014-05-22 09:41
답변 감사드립니다. (__)

저도 일단 입력으로 넣는 배열이 메모리에 없어 생기는 문제로 생각하여

처음에 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을 호출하다 집에 못들어감 (...) 앨리스 2327 2014/05/22
15167     Re:Char* 를 멤버로 갖는 구조체를 입력해야하는 DLL을 호출하다 집에 못들어감 (...) 길이 2264 2014/05/22
15168         Re: 네. 그부분은 확인해보았습니다. 앨리스 2033 2014/05/22
15169             Re:Re: 네. 그부분은 확인해보았습니다. kylix 1994 2014/05/22
15170                 Re:Re:Re: 네. 그부분은 확인해보았습니다. 앨리스 2087 2014/05/22
15171                     Re:Re:Re:Re: 네. 그부분은 확인해보았습니다. kylix 2181 2014/05/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.