프로그래밍 노트

델파이에서 C++(VS2005)에서 작성한 DLL을 사용하는데 있어서 유의할 점 본문

델파이

델파이에서 C++(VS2005)에서 작성한 DLL을 사용하는데 있어서 유의할 점

띠리 2008. 4. 3. 18:58

델파이에서 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