none
[vs2008] 64bit dll 참조 추가 시 에러 RRS feed

  • 질문

  • <환경>

    CPU : 64bit 컴퓨터

    OS : windows 2008 64bit

    프로그램 : Visual Studio 2008

    <에러>

    64bit dll 을 regsvr32로 등록한 후 vs2008 에서 asp.net 프로젝트를 만들고 64bit dll 을 참조추가 시

    아래와 같은 에러가 발생합니다.

    다른 64bit 서버에서는 제대로 추가가 되는데 해당 서버만 이상을 일으키네요.

    궁금한 점은 regsvr32 등록했는데 구성요소서비스에는 COM 에 잘 보입니다.

    하지만 vs2008 에서 참조추가 시 COM 에는 보이지 않습니다. vs2008 에서는 32bit dll 만 보이는 것 같습니다.

    dll 은 http://test.payzone.co.kr/Cipher64.zip 에서 받아볼 수 있습니다.

    아시는 분은 피드백 부탁드립니다.


    • 편집됨 조용헌 2011년 9월 28일 수요일 오전 1:08
    2011년 9월 28일 수요일 오전 1:06

답변

  • 안녕하십니까? 조용헌 님

    Microsoft MSDN Forum 사이트를 방문해 주셔서 감사합니다.

     

    문의 하신 “[vs2008] 64bit dll 참조 추가 시 에러에 대한 답변을 드리겠습니다.

               

    제 생각에는 32-Bit Visual Studio 2008이기 때문에 64Bit-Com Object를 확인할 수 없습니다.

     

    하지만 아래와 같이 진행해서 나타나게 할 수는 있습니다.

     

    1.     COM DLL을 등록을 한 후 OLE/COM Object Viewer프로그램(검색해서 다운 받을 수 있습니다)을 실행합니다.

     

    2.     아래와 같이 GUID를 확인 합니다.

     

     

    3.     시작 -> 실행 -> regedit를 입력 후 실행합니다.

     

    4.     좌측 패널에서 HKEY_CLASSES_ROOT\TypeLib\<위에서 찾은 GUID> 이동 후 아래와 같이 win32키 생성후 win64와 같이 속성값을 작성합니다.

     

     

    5.     Visual Studio 2008에서 Add Reference에서 COM DLL을 확인합니다.

     

    제가 문제에 대해 더 알아야 할 것이 있다면 응답 주시면 감사하겠습니다.

    제시해 드린 답변이 도움이 되었기를 바랍니다.


    2011년 9월 28일 수요일 오전 9:20
    중재자

모든 응답

  • 안녕하십니까? 조용헌 님

    Microsoft MSDN Forum 사이트를 방문해 주셔서 감사합니다.

     

    문의 하신 “[vs2008] 64bit dll 참조 추가 시 에러에 대한 답변을 드리겠습니다.

               

    제 생각에는 32-Bit Visual Studio 2008이기 때문에 64Bit-Com Object를 확인할 수 없습니다.

     

    하지만 아래와 같이 진행해서 나타나게 할 수는 있습니다.

     

    1.     COM DLL을 등록을 한 후 OLE/COM Object Viewer프로그램(검색해서 다운 받을 수 있습니다)을 실행합니다.

     

    2.     아래와 같이 GUID를 확인 합니다.

     

     

    3.     시작 -> 실행 -> regedit를 입력 후 실행합니다.

     

    4.     좌측 패널에서 HKEY_CLASSES_ROOT\TypeLib\<위에서 찾은 GUID> 이동 후 아래와 같이 win32키 생성후 win64와 같이 속성값을 작성합니다.

     

     

    5.     Visual Studio 2008에서 Add Reference에서 COM DLL을 확인합니다.

     

    제가 문제에 대해 더 알아야 할 것이 있다면 응답 주시면 감사하겠습니다.

    제시해 드린 답변이 도움이 되었기를 바랍니다.


    2011년 9월 28일 수요일 오전 9:20
    중재자
  • 답변주신대로 처리하여 정상적으로 작동하는 것을 보았습니다. 감사합니다.

    한가지 궁금한 것이 다른 PC에서는 레지스트리 조작없이 잘 참조 되었는데 그렇다면 regsvr32 하는 것에서 차이가 있는 것인지 궁금합니다.

    어떤 경우에 win32,win64 키 값이 같이 나오거나 win64 키 값만 나오는 지 궁금합니다.

     

    질문 외에 한가지 더 궁금한 사항이 있습니다.

    위 dll 로 ASP.NET 홈페이지를 처리하다가 발생한 오류인데 어떤 경우에 이 오류가 발생하는지 궁금합니다.

    다른 홈페이지에서는 이 dll 이 정상적으로 작동합니다. 혹시 dll 간의 충돌이 있을 수도 있는 지...

    오류는 아래와 같습니다.

    감사합니다.

    2011년 9월 29일 목요일 오전 5:10
  • 안녕하십니까? 조용헌 님

    Microsoft MSDN Forum 사이트를 방문해 주셔서 감사합니다.

     

    1.     어떤 경우에 win32,win64 키 값이 같이 나오거나 win64 키 값만 나오는 지 궁금합니다

     

    32bit regsvr32, 64bit regsvr32 를 이용해서 등록을 한 결과 동일하게 Registry  64bit키만 생성이 되었습니다. 제 생각에는 DLLTarget Platform 빌드 기준으로 등록 됩니다.

     

    2.     ASP.NET 홈페이지를 처리하다가 발생한 오류

     

    위의 오류는 Web Application에서 Exception이 발생한 경우 입니다. 해당 소스를 참조하셔야 합니다.

     

    제가 문제에 대해 더 알아야 할 것이 있다면 응답 주시면 감사하겠습니다.

    제시해 드린 답변이 도움이 되었기를 바랍니다.

    2011년 9월 29일 목요일 오전 6:42
    중재자
  • 안녕하세요. Visual Studio ALM MVP 엄준일 입니다.

    위에 이미 최고의 답변을 주셔서 더 할말은 없습니다만,
    혹시나 하는 마음에 답글 남깁니다.

    프로그램의 코드 로직에 Null 값을 참조하여 오류가 발생하는 경우도 있지만,
    조용헌님과 같이 외부 DLL 을 참조하여 사용하실 경우도 NullReferenceException 이 발생하기도 합니다.

    만약 로드하려고 하는 DLL 을 참조 또는 DllImport 를 사용하시는 경우
    해당 API의 메서드 자체가 Null 반환이 되는 경우가 있습니다.

    모든 경우는 아니지만, 과거 XP -> Vista 환경의 일부 클라이언트에서
    외부 DLL 의 메서드 참조가 Null 이 반환되는 것을 확인한 적이 있습니다.

    참고 부탁 합니다.
    감사합니다. 


    엄준일 (Junil, Um) Microsoft Visual Studio ALM MVP (Team System) Personal Blog : http://blog.powerumc.kr Visual Studio Korea Team Blog : http://vsts2010.net
    2011년 11월 1일 화요일 오후 1:22