2012-08-03 4 views
1

C++로 정의 된 함수를 사용하는 WPF 응용 프로그램을 작성하려고합니다. C++ 응용 프로그램은 DLL로 컴파일됩니다.DllImport Not Working

내가하고있는 일은 DllImport 특성을 사용하여 함수를 가져 와서 사용하는 것입니다. 내 컴퓨터에서 잘 작동하지만 다른 컴퓨터에서 WPF 응용 프로그램을 실행하려고하면 "DLL을 찾을 수 없습니다"오류가 발생합니다.

내 C# (WPF) 코드의 발췌 :

[DllImport("Dll.dll")] 
public static extern int MyFunc(); 

public MainWindow() 
{ 
    InitializeComponent(); 
    MessageBox.Show("Starting"); 
    try 
    { 
    MessageBox.Show(MyFunc().ToString()); 
    } 
    catch (Exception exc) 
    { 
    while (exc != null) 
    { 
     MessageBox.Show(exc.Message); 
     exc = exc.InnerException; 
    } 
} 

내 C++ 코드 내 오류가있을 경우

extern "C" __declspec(dllexport) int MyFunc() { 
    return 3; 
} 

사람이 볼 수 있을까요?

미리 도움 주셔서 감사합니다.

편집 : 문제는 종속성 "MSVCR100D"가없는 것으로 보입니다. 내 이해는이 VC++ 재배포 가능 패키지에 파일을 내가 아무 소용이 설치되어있는 것입니다.

답변

5

DLL은 다른 컴퓨터에 설치되지 않은 다른 DLL에 따라 달라질 수 있습니다. 종속성은 Dependency Walker으로 확인할 수 있습니다.

일반적인 누락 된 종속성은 Visual Studio C/C++ 런타임 라이브러리입니다. 그들이 누락 된 경우, 그냥 구글. Microsoft는 재배포 가능 패키지를 제공합니다.

+0

고마워. 나는 그 둘을 시도 할 것이다. – JonaGik

+0

Dependency Walker를 사용하여 응용 프로그램을 프로파일 링했는데 분석에 사용하고있는 DLL이 표시되지 않았습니다. 따라서이 문제 외에도 DLL의 종속성을 찾을 수 없습니다. – JonaGik

+0

C++ 분석 종속성 워커가있는 DLL, C# 하나가 아닙니다. 그리고 MSVCR100D.dll이 누락 된 경우 MSVCR100D.dll (디버그 용 D)이 배포되지 않고 redestributable 패키지의 일부가 아니므로 디버그 빌드를 릴리스 빌드로 전환해야합니다. – Codo

0

dll이 다른 컴퓨터에도 등록되어 있습니까? 내용을 빌드하고 Output 폴더에 복사를 dll 파일에 대해 항상 설정하십시오.

+0

두 빌드 명령은 무엇을합니까? – JonaGik