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
[15464] Re:Re:VC++에서 만든 DLL을 델파이에서 불러올때 데이터형을 어떻게 해야 할지 모르겠습니다.
첫눈 [hadugo] 2032 읽음    2015-04-09 09:33
답변해 주신 두 분께 감사드립니다.
제가 올려 놓은 코드는 그냥 함수의 인자를 참조하는 방법과
함수의 결과를 리턴하는 방법을 알기위한 샘플일 뿐이구요.
굳이 문자열을 더하여 리턴해야 하는건 아닙니다.

어쩻든 너무 기초적인 것이라 간단한 답변이라도 달릴까 했는데
이렇게 구체적인 설명까지 달아주셔서 감사합니다.

정영훈 님이 쓰신 글 :
: char* 은 델파이에서 string 과는 달리 null 로 끝나는 문자열입니다.
: char *Resule = *Str1 + *Str2;
: 이것이 불가능한 이유부터 설명드려야 할 것 같습니다.
: 우선 str1 이 abcd\0 이라고 하고 str2 가 1234\0 이라고 가정합니다.
: str1 과 str2 의 문자열을 합친다고 했을때 abcd\01234\0 이 될 것 입니다.
: 그런데 abcd\01234\0 문자열이 저장될 만한 공간선언이 되어 있지 않습니다.
: char *Resule 이것은 스택이라는 공간중의 4바이트 주소값에 불과합니다.
: 즉 문자열 두개가 str1 + str2 로 성공적으로 되었다해도 저장할 메모리 공간이 확보되지 않았으므로 저장할 수가 없습니다.
: 그리고 *str1 은 델파이의 string 과는 다르다고 했습니다. 저것은 포인터입니다.
: *str1 + *str2 는 str1 의 첫문자의 아스키코드 + str2의 첫문자 아스키코드 가 됩니다.
:
: 결국 UserFunc 의 리턴되는 주소는 스택주소중에 쓰레기값이 리턴되게 되며 이상한 문자열로 보이게 됩니다.
: 첫눈 님이 쓰신 글 :
: : VC++에서 DLL을 만들었습니다.
: : 그리고 그것을 델파이에서 DLL안에 있는 함수를 불러들이는건데요.
: :
: : 그냥 단순한 함수입니다.
: :
: : 인수로 전달받은 두개의 문자열을 합쳐서 리턴해주는건데요.
: : 문자열 처리를 어떻게 해야 할지 모르겠습니다.
: :
: :
: : char *UserFunc(char *Str1, char *Str2)
: : {
: :         char *Resule = *Str1 + *Str2;
: : 	return Result;
: : }
: : 
: : 

: :
: : 이렇게 하고 델파이에서는
: :
: : procedure TForm1.Button2Click(Sender: TObject);
: : type
: :   TFunc = function(Str1, Str2 : PAnsiChar):PAnsiChar;
: : Var
: :   hDll: THandle;
: :   Parsing : TFunc;
: :   Str1, Str2 : PAnsiChar;
: :   Result : PAnsiChar;
: : begin
: :   hDll := LoadLibrary('Test.dll');
: :    if HDll < 32 then Exit;
: : 
: :    Parsing := GetProcAddress(hDll, 'UserFunc');
: :    Str1 := 'aaaa';
: :    Str2 := 'bbbb';
: :    Result := Parsing(Dic);
: : end;
: : 
: : 

: :
: : 이렇게 하면 원하는 결과가 안나오고 이상한 문자가 나옵니다.
: :
: :
: :
: :
: :
: : 그리고 두번째 질문은
: :
: : TFunc = function(Str1, Str2 : PAnsiChar):PAnsiChar;
: : 

: : 이렇게 하지 않고
: :
: : TFunc = function(var Str1 : PAnsiChar; var Str2 : PAnsiChar):PAnsiChar;
: : 

: : 이렇게 하여
: :
: : 전달된 인수의 값이 바뀌면 DLL함수 안에서 바뀌면 그 값을 그대로 다시 돌려 받고 싶은데
: : 이건 어떻게 처리해야 할지 모르겠습니다.

+ -

관련 글 리스트
15458 VC++에서 만든 DLL을 델파이에서 불러올때 데이터형을 어떻게 해야 할지 모르겠습니다. 첫눈 1742 2015/04/08
15461     Re:VC++에서 만든 DLL을 델파이에서 불러올때 데이터형을 어떻게 해야 할지 모르겠습니다. 정영훈 1894 2015/04/09
15462         Re:Re:VC++에서 만든 DLL을 델파이에서 불러올때 데이터형을 어떻게 해야 할지 모르겠습니다. 오랑캐꽃 1991 2015/04/09
15460     Re:VC++에서 만든 DLL을 델파이에서 불러올때 데이터형을 어떻게 해야 할지 모르겠습니다. 오랑캐꽃 2740 2015/04/09
15459     Re:VC++에서 만든 DLL을 델파이에서 불러올때 데이터형을 어떻게 해야 할지 모르겠습니다. 정영훈 1848 2015/04/09
15464         Re:Re:VC++에서 만든 DLL을 델파이에서 불러올때 데이터형을 어떻게 해야 할지 모르겠습니다. 첫눈 2032 2015/04/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.