VC++ 6.0으로 DLL 제작하여 VB에서 사용시 주의사항

By | 2006/05/08

1. DEF파일을 제작하라.

가끔 DEF 파일을 제작하지 않으면,

‘오류 번호 453’ 오류 메시지를 낸다.

DEF파일 제작은 다음과 같이 하면 된다.

  • LIBRARY “DLL 파일 이름”
    EXPORTS

         “VB에서 쓸 함수 이름”=”C 코드상의 함수 이름(자세한 이름 짓기는 3번에 있음)”

 

2. 함수 호출은 STDCALL로 한다.

VC++6.0의 기본 함수호출방식은 CDECL이다.

그러나 VB에서 사용하려면 STDCALL로 해야 한다.

(각각의 차이는 잘 기억이 안나는군요. 조만간 마련하도록 하겠습니다.)

따라서 다음과 같은 방식으로 __stdcall(_가 두개다.)하면 된다.

 

3. DEF 파일 제작시 함수명을 바꿔라.

가끔 ‘오류 번호 49’ 오류 메시지를 내는 경우가 있다.

이유야 여러 가지겠지만, 다음과 같이 해결을 볼 수 있다.

DEF파일 제작시 해당 함수 이름을 다음과 같이 제작한다.

  • _”함수명”@”함수 모든 인자들의 크기합”

따라서 Cac함수는 1번에 나오듯이 ‘[email protected]’로 적었다.

 

결론

일찍이 이 문제는 C로 DOS Console용 프로그램으로 만들어서 작동시켰을 때

아무런 문제 없이 작동하였습니다.

그런데 유독 VB에 연결해 쓰려고 하니 온갖 에러를 토해내는 것입니다.

이 문제를 풀기 위해 약 3주일 가량 지냈습니다.

물론 그 중간중간에 프로젝트를 중단하고 다른 일을 하여

실제로 문제 해결을 위해 투자한 시간은 그리 많지 않습니다.

하지만 답답함은 오래 갔기에 이렇게 따로 글을 적어놓았습니다.

실제로 이번 함수들은 시험작품이었습니다.

VB에서 만들어서 사용해도 아무런 문제가 없을

간단한 함수이지요.

하지만 시험삼아 만들어보았기에 시간은 아깝지 않습니다.

 

참조

MSDN

데브피아

HowtoBank.Net

Windows API 정복

4 thoughts on “VC++ 6.0으로 DLL 제작하여 VB에서 사용시 주의사항

  1. MaseR

    DLL에 담겨져 있는 함수를 선언하는 DEF 파일을 직접 만들어줘야 한다는 건가요??
    어렵네요^^

    Reply
  2. NoSyu

    예전 기술이라 필요없다. 라고 책에는 적혀 있어 일부러 패스했는데
    결국 쓰이게 되더군요.
    VC++6.0이 예전것이라 그런건가..OTL..
    빨리 C#으로 가고 싶어라..

    Reply
  3. 나그네

    C#이나 VB.NET에서 닷넷끼리는 저런 복잡한거 안만들어도 쉽게 되는거 같네요. C# DLL + VB.NET 연동은 안해봤지만 C# DLL + C# EXE 는 성공했지요.. 테스트는 간단한 곱셈 예제 만들어서 해봤지만요..(VC++ 에선 어떻게 DLL을 사용하는지 모르겠지만 C#에서는 사용하려는 DLL을 참조해줘야 합니다.^^;)

    Reply
    1. NoSyu

      반갑습니다.
      C#과 VB.NET에서는 어렵지 않게 되는군요.
      사실 저도 이제 2008을 써야겠으나 국제 학생증이 없어서 아직 못 얻었습니다.OTL…..

      좋은 정보 고맙습니다.^^

      Reply

Leave a Reply