none
Runtime과 Redistributable차이점 RRS feed

  • 질문

  • opencv와 tesserct ocr을 사용하는 C++라이브러리를 만들어 c#에서 사용하는 프로젝트를 만들고 있습니다.

    저번 질문에 이어서 문제 점이 발생하였는데요.[아래는 지난번 질문 주소입니다.]

    https://social.msdn.microsoft.com/Forums/ko-KR/000e8f42-cb16-455e-995a-08d3e1da5418/microsoft-visual-c-2010-x64-runtime-?forum=vsko#290212d5-fc3a-4b49-8092-97d5c672af3c

    여기에 글을 올려 Microsoft Visual C++ 2010 Redistributable Package (x64) 

    라는 것을 다운 받아 설치를 해보았습니다.

    확인을 해보니 제어판에는 Microsoft Visual C++ 2010 Redistributable Package (x64) 설치가 되었습니다.

    하지만 같은 에러가 발생하고 있습니다. 원인을 찾다보니 스튜디오2010을 설치할때는

    Microsoft Visual C++ 2010 Runtime이 설치가 되었습니다.

    Redistributable와 Runtime비교를 했을시

    C:\Windows\Installer\$PatchCache$\Managed\ 폴더에 다른 이름의 하위폴더로 만들어지지만

    같은 파일이 설치가 되는 것을 확인하였습니다.

    그런데 왜 Redistributable을 설치하였을때는 C#프로젝트를 실행하고

    C++라이브러리를 사용하는 버튼을 누를때 에러가 뜨고

    Runtime을 설치하였을때는 같은 방법으로 해도 에러가 발생하지 않았습니다.

    왜 그런것일까요?

    에러는 다음과 같습니다.

    C#을 실행하고 c++라이브러리를 사용하는 버튼을 눌렀을때

    에러창이 뜨며

    'DLL 'test_dll.Dll'을 로드할 수 없습니다. 지정된 모듈을 찾을 수 없습니다. (예외가 발생한 HRESULT : 0x800700E)'

    라는 문구가 뜨며

    에러를 자세히 보았을때 입니다.

    아래와 같이 띄워집니다.

    ////////////////////////////////////////

    이 대화 상자 대신 JIT(Just-in-time) 디버깅을 호출하는
    방법에 대한 자세한 내용은 이 메시지의 뒷부분을 참조하십시오.

    ************** 예외 텍스트 **************
    System.DllNotFoundException: DLL 'test_dll.Dll'을(를) 로드할 수 없습니다. 지정된 모듈을 찾을 수 없습니다. (예외가 발생한 HRESULT: 0x8007007E)
       위치: cs_dll_test.Form1.FileInput(StringBuilder filename)
       위치: cs_dll_test.Form1.FindPlate() 파일 C:\Users\koo\Documents\Visual Studio 2010\Projects\cs_dll_test2\cs_dll_test\Form1.cs:줄 121
       위치: cs_dll_test.Form1.button2_Click(Object sender, EventArgs e) 파일 C:\Users\koo\Documents\Visual Studio 2010\Projects\cs_dll_test2\cs_dll_test\Form1.cs:줄 44
       위치: System.Windows.Forms.Control.OnClick(EventArgs e)
       위치: System.Windows.Forms.Button.OnClick(EventArgs e)
       위치: System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       위치: System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       위치: System.Windows.Forms.Control.WndProc(Message& m)
       위치: System.Windows.Forms.ButtonBase.WndProc(Message& m)
       위치: System.Windows.Forms.Button.WndProc(Message& m)
       위치: System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       위치: System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       위치: System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


    ************** 로드된 어셈블리 **************
    mscorlib
        어셈블리 버전: 4.0.0.0
        Win32 버전: 4.0.30319.1026 (RTMGDR.030319-1000)
        코드베이스: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
    ----------------------------------------
    cs_dll_test
        어셈블리 버전: 1.0.0.0
        Win32 버전: 1.0.0.0
        코드베이스: file:///C:/Users/koo/Desktop/DetectionPlate/Start.exe
    ----------------------------------------
    System.Windows.Forms
        어셈블리 버전: 4.0.0.0
        Win32 버전: 4.0.30319.1002 built by: RTMGDR
        코드베이스: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
    ----------------------------------------
    System.Drawing
        어셈블리 버전: 4.0.0.0
        Win32 버전: 4.0.30319.1001 built by: RTMGDR
        코드베이스: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
    ----------------------------------------
    System
        어셈블리 버전: 4.0.0.0
        Win32 버전: 4.0.30319.1026 built by: RTMGDR
        코드베이스: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
    ----------------------------------------
    System.Configuration
        어셈블리 버전: 4.0.0.0
        Win32 버전: 4.0.30319.1015 (RTMGDR.030319-1000)
        코드베이스: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
    ----------------------------------------
    System.Xml
        어셈블리 버전: 4.0.0.0
        Win32 버전: 4.0.30319.1026 built by: RTMGDR
        코드베이스: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
    ----------------------------------------
    mscorlib.resources
        어셈블리 버전: 4.0.0.0
        Win32 버전: 4.0.30319.1 (RTMRel.030319-0100)
        코드베이스: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_ko_b77a5c561934e089/mscorlib.resources.dll
    ----------------------------------------
    System.Windows.Forms.resources
        어셈블리 버전: 4.0.0.0
        Win32 버전: 4.0.30319.1 built by: RTMRel
        코드베이스: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_ko_b77a5c561934e089/System.Windows.Forms.resources.dll
    ----------------------------------------

    ************** JIT 디버깅 **************
    JIT(Just In Time) 디버깅을 사용하려면 이 응용 프로그램 또는 컴퓨터의
    config 파일(machine.config)의 jitDebugging 값을 
    system.windows.forms 섹션에 설정해야 합니다.
    또한 응용 프로그램은 디버깅할 수 있도록 컴파일되어야
    합니다.

    예:

    <configuration>
        <system.windows.forms jitDebugging="true" />
    </configuration>

    JIT 디버깅을 사용하면 처리되지 않은 모든 예외는
    이 대화 상자에서 처리되지 않고 컴퓨터에 등록된 JIT 
    디버거에 보내집니다.

    ///////////////////////////////////////



    • 편집됨 koo2 2015년 2월 23일 월요일 오후 12:22
    2015년 2월 23일 월요일 오후 12:17

답변

  • Microsoft Visual C++ 2010 재배포 가능 패키지는 Visual C++ 2010이 설치되지 않은 컴퓨터에서 Visual C++로 개발된 응용 프로그램을 실행하는 데 필요한 Visual C++ 라이브러리의 런타임 구성 요소를 설치하는 것입니다.

    재배포 패키지 설치를 정상적으로 했으나 참조가 정상적이지 않거나, 비정상 설치로 예상할 수 있을 것 같습니다.

    test_dll.Dll은 사용자가 생성한 DLL인가요? 

    재배포 패키지는 CRT(C 런타임), 표준 C++, ATL, MFC, OpenMP 및 MSDIA 라이브러리의 런타임 구성 요소를 설치합니다

    [참고자료]

    Visual Studio.NET 또는 Visual Studio 2005에서 네이티브 Visual C++ 코드에서 관리 되는 DLL을 호출 하는 방법

    제시해 드린 답변이 도움이 되었기를 바랍니다.
       
    답변이 문제 해결에 도움이 되었다면 답변으로 채택을 부탁드립니다.
    하지만 문제 해결이 되지 않아서 정확한 답변을 원하는 경우에는 문제의 정보를 더 자세하게 답변으로 제공해주시기 바랍니다

    2015년 2월 25일 수요일 오전 1:40
    중재자