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

델파이 팁&트릭
Delphi Programming Tip&Tricks
[332] VC++에서 DLL을 만들고 델파이에서 사용하기
첫눈 [hadugo] 6607 읽음    2015-04-08 17:52
Visual C++에서 DLL을 만들어 델파이에서 사용해야 할 일이 생겼습니다.

제가 C언어를 만져 본 것이 MS-DOS3.1 시절이던가? Turbo-C라는 것이 전부이고
프로그래머 생활을 그만 둔 것이 Win95 처음 나왔을때 이니
구글링해가며 강좌를 찾아봐도 한 단계씩 아주 친절하게 강좌한 것이 아니면 따라 할 수가 없습니다.

하지만 그렇게 친절한 강좌는 찾을 수가 없고
대부분의 강좌가 중간 중간 건너 뛰면서 진행하고
나머지들이라도 해도 샘플소스코드의 일부만 보여주기 때문에
도데체 소스코드를 어느 부분에 삽입하라는 것인지 알아 들을 수가 없습니다.

결국 강좌 보는 것을 포기하고 몇일 동안 별 짓을 다 해봤습니다.
심지어 해더파일에 소스코드를 몽땅 넣어 보기도 했으니
제가 할 수 있는 황당한 짓거리는 모두 해 본것 같습니다.

그리고 간신히 알게 된 것!
VC++에서 만든 DLL을 델파이에서 사용하는 방법이 관한 강좌는 수도 없이 많지만
재대로 되는건 단 하나도 없다는 것입니다.

이유는 사용자 함수를 dllmain.cpp에 넣어 주어야 델파이에서 호출이 되는데
모두들 [프로젝트명.cpp]에 넣으라고 되어 있고
거기에 사용자 함수를 넣은 후에는 어떤 작업을 해 주어야 델파이에서 불러 들일 수 있는지에 대한 언급이 전혀 없으니까요.

그렇지 않아도 홈페이지 파싱문제가 몇 개월동안 해결되지 않아 이곳 게시판에 질문을 올리고 이제야 [정영훈님]으로부터 답변을 들었는데 이 문제까지 겹치니 아주 미칠지경이었는데요.

되지도 않는 강좌, 중간 중간 건너뛰어 암호풀이를 하듯 고생을 해야 이해할 수 있는 강좌를 올려놓고
정작 재대로 된 강좌를 수십페이지 뒤로 밀려 찾기조차 어렵게 만드는 사람들
그것도 모자라 되지도 않는 강좌를 확인도 하지 않고 여기 저기 퍼날라
재대로 된 강좌를 찾는게 하늘에 별따기 입니다.
이런 사람들 강좌하느라 수고한 것은 알겠지만 정말 욕이 나오려고 합니다.

하여간 하도 고생하다보니 혹시 저같은 분 계실까봐 올립니다.

분명히 말씀드리지만 전 아무것도 모릅니다.
델파이는 그저 기초문법 정도만 알 뿐이고 VC++에 대해서는 정말 깜깜합니다.
그러니 제 강좌 중 잘못된 내용이나 의심되는 내용이 있어도 답변해 드릴 능력이 없으니
그냥 따라해 보기만 하시고 질문은 다른 고스님들께 해주시기 바랍니다.





먼저 VC++ 에서 DLL을 만드는 방법입니다.
이 내용은 Visual Studio

1.
[파일] -> [New] -> [Project] -> [Visual C++] -> [Win32 Project]선택 후 프로젝트명과 솔루션명 입력 후 [OK]
첨부된 이미지파일 중 [DLL01001.png] 참고

2.
프로젝트 위자드 창이 나타나면 [Next]버튼 클릭
( [Finish]버튼이 아닙니다.)
첨부된 이미지파일 중 [DLL02001.png] 참고

3.
다른 옵션은 가만 두고
[Application type]에서 [DLL] 선택
[Additional options] 에서는 [Export symbols] 체크
[Finish]버튼 클릭
첨부된 이미지파일 중 [DLL03001.png] 참고
4.
이렇게 한 후에 [dllmain.cpp]를 열고

#include "stdafx.h"
이 문장 바로 아래
extern "C" __declspec(dllexport)char *Parsing(char *Dic);

이렇게 입력합니다.

그리고 마지막 문장 아래에
char *Parsing(char *Dic)
{
	......
	return ....;
}

이렇게 원하는 함수를 만들어 넣고 저장합니다.


첨부된 이미지파일 중 [DLL04001.png] 참고.


5.
[Build] 메뉴에서 [Build Solution]을 선택하여 컴파일을 하면
소스코드가 저장되어 있는 폴더 안에 Debug폴더가 있고
그 안에 [프로젝트명.dll]파일이 생성되어 있습니다.

일단 VC++쪽에서는 이 파일 하나만 있으면 됩니다.





이번에는 델파이쪽입니다.

버젼별 차이는 없을 것으로 예상되지만 어쩻든 전 Delphi XE2 정식버젼을 사용합니다.


procedure TForm1.Button2Click(Sender: TObject);
type
  TFunc = function(var Dic : PAnsiChar):PAnsiChar;
Var
  hDll: THandle;
  Parsing : TFunc;
  Dic : PAnsiChar;
  Result : PAnsiChar;
begin
  hDll := LoadLibrary('sample.dll');
   if HDll < 32 then Exit;

   Parsing := GetProcAddress(hDll, 'Parsing');
   Dic := 'aaaa';
   Result := Parsing(Dic);
end;



주의해서 보실곳은
Parsing := GetProcAddress(hDll, 'Parsing');
이 문장인데요.

여기서 괄호 안의 'Parsing'이 값이 DLL안에 정의되어 있는 사용자함수이름입니다.

다시 말해 'Parsing'라는 이름의 함수를 Parsing변수에 담아주는데
Parsing변수는 앞에서
var
Parsing : TFunc; 

이렇게 정의되어 있고
TFunc 타입은
Type
TFunc = function(var Dic : PAnsiChar):PAnsiChar;

이렇게 정의되어 있네요.




이렇게 한 후에 컴파일 하고 앞에서 만들어둔 DLL파일과 델파이로 만든 exe파일을 같은 폴더 안에 두면 됩니다.


이렇게 간단한 것을 구글링을 수십페이지 뒤지고 똑같은 내용을 수십번씩 다시 보면서
되지도 않는 강좌들 때문에 생 고생을 했네요.


혹시 이 내용에 문제가 있으면 고수님들께서 지적과 수정해 주시고
내용에 심각한 문제가 있으면 지우도록 하겠습니다.

+ -

관련 글 리스트
332 VC++에서 DLL을 만들고 델파이에서 사용하기 첫눈 6607 2015/04/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.