델파이에서 C++(VS2005)에서 작성한 DLL을 사용하는데 있어서 유의할 점 델파이
프로그래밍 2011. 8. 8. 09:44 |출처:http://wwwi.tistory.com/207
델파이에서 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에서 선택한
호출 규칙과 동일하게 선언해야 된다.
이런 것들을 제대로 파악을 못해서 몇일동안 정말 삽질을 했다.
왜 안돌아갈까 왜 안돌아갈까?
많이 고민했다.
시간이 지나서 또 삽질할까봐 적어둔다.
'프로그래밍' 카테고리의 다른 글
내부적으로 정의된 매크로 리스트 [출처] 내부적으로 정의된 매크로 리스트|작성자 딱총구리 (0) | 2011.08.09 |
---|---|
linux thread 생성 개수? (0) | 2011.08.08 |
[Android] 화면 회전시에 Activity onCreate() 방지하기 (0) | 2011.08.06 |
[Delphi] DLL 호출 규칙(Calling Convention) 테스트용 DLL 및 Source - Language/Delphi - (0) | 2011.08.02 |
File Management in Python (0) | 2011.08.02 |