2016-09-08 8 views
0

내 C++ 프로젝트에서 dll을 사용하는 데 한 가지 문제가 있습니다! (내 코드 불어) :C++에서 호출 할 때 DLL을 찾고 열 수 없음

#include <iostream> 
#include <conio.h> 
#include <windows.h> 
#include <string> 

typedef const char* (WINAPI* AvLicens)(void); 


int main() 
{ 
    HMODULE Loadme; 
    Loadme = LoadLibrary(L"D:\\avcodec.dll"); 

    if (NULL != Loadme) 
{ 
    std::cout << "Loaded."; 
    AvLicens func = (AvLicens)GetProcAddress(Loadme, "avcodec_license"); 
    if (func != NULL) 
    { 
     std::cout << "Message: \n" << func << std::endl; 
    } 
} 
else 
{ 
    std::cout << "// Error: Can not Open '" << Loadme << "'" << std::endl; 
} 

내 문제는 다음 avcodec.dll를 찾을 수 없습니다! 사실 avcodec.dll에서 avcodec_license를 호출하려고합니다. 나는 다른 dll에 대해 이것을 테스트했지만 나에게도 같은 문제가 나타나있다. Dependency Walker는 당신에게 당신의 라이브러리를로드 할 수 없습니다 및 GetLastError 코드도 도움이되지 않은 경우, 당신은 사용할 내부 추적 로그를 사용할 수있는 이유는 아이디어를 제공하지 않은 경우

당신에게

+2

당신은 호출해야 좋은 수'GetLastError'는 LoadLibrary''에 대한 호출이 실패합니다. – PaulMcKenzie

+2

그것이 열리지 않는 데에는 많은 이유가 있습니다. "dependency walker"에서 DLL 로딩을 시도 했습니까? –

답변

0

감사 (다른 섹션으로 이동) LoadLibrary.

꽤 발전된 기능이며 유틸리티를 얻으려면 이 필요합니다. 이 부분은 Debugging Tools for Windows입니다. 로깅 다음 명령을 실행하도록 설정하려면 :

gflags.exe -i YouProject.exe +sls 

을 그 추적 로그 출력을 볼 수 디버거에서 응용 프로그램을 실행 한 후.

+0

이미 'Windows 용 디버깅 도구'가 있으며 다음 명령을 실행하십시오. gflags.exe -i MyProject.exe + sls. 을 입력하고 설정에서 예외 로깅을 사용하도록 설정하십시오. 로그는 어디에 저장 되었습니까? – Sina

+0

@Sina 디버거에서 앱을 실행합니다. Visual Studio를 사용하는 경우 디버거 출력보기에 로그가 표시됩니다. – Nikita

0

감사합니다들 ...

나는 그냥 x86 및 i는 DLL 소스에서 보지 않았다 'avcodec_license'함수 이름에 64에서 디버그 CFG을 변경하고 'avcodec_version'로 변경! 뭐든지 ... 효과가 있어요! 너와 내 경험을 공유해 주셔서 감사합니다.

이 :)

관련 문제