Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- winsock
- Visual Basic
- MySQL
- 파라미터
- 기초
- VB.NET
- Visual Studio 2005
- xml
- Firebird
- 문자열
- dll
- vb
- 입문
- 셋업
- 시리얼 통신
- 초보
- 데이터베이스
- 인스톨
- 파이어버드
- 소니
- MFC
- SDK
- 예제
- SQL
- PostgreSQL
- Delphi
- 설치
- c#
- 델파이
- WIN32 SDK
Archives
- Today
- Total
프로그래밍 노트
델파이에서 C++(VS2005)에서 작성한 DLL을 사용하는데 있어서 유의할 점 본문
델파이에서 VC 8.0(VS 2005)에서 작성한 DLL을 사용하는데
개발환경이 셋업되어있지않은 곳에서 사용하는데 문제가 있어서 몇일간 삽질한 내용을
정리하고자한다.
테스트 환경
우선 Visual C++ Ver 8.0에서 DLL을 만들었다.
그리고 그것을 Delphi 2005에서 만든 실행 파일에서 불러서 쓰려했다.
실행파일을 실행한 OS는 Windows XP Professional SP2로
개발환경이 전혀 깔려있지않은 상태였다.
■ 첫번째 삽질
델파이라 만든 실행파일을 실행하면 아래의 메세지가 떴다.
"응용 프로그램을 제대로 초기화하지 못했습니다(0xc0150002)."
→ 문제는 Visual C++ Ver 8.0에서 DLL을 만들 때 Debug 모드로 빌드를 해서
Debug용 DLL로 테스트를 했었다.
Release 모드로 바꾸어서 빌드 해봤지만 에러는 뜨지 않았지만
dll이 제대로 동작하지 않았다.
■ 두번째 삽질
VC 8.0(VS 2005)으로 DLL을 만들면 DLL만 카피한다고 DLL이 제대로 동작하지 않는다.
자세한 내용은 옆의 링크 참조 배포(C++)
여하튼 가장 편한 방법은 아래의 패키지를 설치하는 것이 가장 편한 것같다.
Microsoft Visual C++ 2005 재배포 가능 패키지(x86)
(무엇이 좋아졌는지는 잘 모르겠지만 왜 더 불편하게 만들어졌는지가 잘 이해가 안간다.)
■ 세번째 삽질
호출 규칙이란 것을 모르고 DLL을 작성하였다.
(아직도 제대로 이해하지 못하고 있지만...)
Visual C++ 2005의 호출규칙(컴파일 옵션) 에는 아래와 같은 것들이 있다.
__cdecl
__fastcall
__stdcall
__cdecl, __pascal, __stdcall의 차이점 (구글검색)
위 링크를 보면 자세한 내용 있는 홈페이지를 볼 수 있다.
(주로 한 글이 계속 펌되어져있다.)
가변매개인자를 꼭 사용해야만 한다면 반드시 cdecl을 사용해야된다고 한다.
이런 위의 사실들을 모르고 dll을 만들었기 때문에 제대로 dll을 인식하지 못했다.
Visual C++ 2005의 호출규칙 컴파일 옵션을 설정하는 방법은
메뉴의 프로젝트(P)에서 속성(P)[Alt+F7]을 선택하면 속성 페이지가 선택된다.
구성에서 활성(Release)를 선택하고
구성 속성 밑의 C/C++를 선택하고 그 밑의 고급을 선택한다.
그러면 호출규칙이 표시된다.
물론 델파이에서 DLL 함수 선언할 때도 Visual C++ 2005에서 선택한
호출 규칙과 동일하게 선언해야 된다.
이런 것들을 제대로 파악을 못해서 몇일동안 정말 삽질을 했다.
왜 안돌아갈까 왜 안돌아갈까?
많이 고민했다.
시간이 지나서 또 삽질할까봐 적어둔다.
Comments