2011-04-19 2 views
2

Visual Studio 2010을 사용하여 타사 앱 (AviSynth)의 플러그인으로 32 비트 DLL을 만듭니다. 내가 FFTW (http://fftw.org) DLL을 사용하려고 시도 할 때까지 DLL이 타사 응용 프로그램에 의해 올바르게로드되고있었습니다. 32 비트 FFTW DLL을 가져 와서 "lib /def:libfftw3-3.def"를 실행하여 .lib 파일을 만들고 프로젝트의 리소스로 추가했습니다. 함수 호출을 몇 개 만들었습니다. 그것은 잘 컴파일하지만 타사 도구에서로드하려고하면 실패합니다.프로젝트에 다른 DLL을 연결 한 후 C++ DLL을로드 할 수 없습니다.

나는 내 DLL과 함께 FFTW DLL을 넣으려고했지만 내 DllMain 내부에서 LoadLibrary를 사용해 보았지만 여전히 작동하지 않습니다.

DllMain 함수와 AviSynth (AvisynthPluginInit2)에서 호출하는 함수에서 디버거를 중지 할 수 있지만 AviSynth는 DLL을로드 할 수 없으며 이전에 호출 된 함수의 맨 위에서 중단 점을로드 할 수 없다고 주장합니다 더 이상 치지 않습니다.

AviSynth 오류 메시지는 다음과 같습니다로드 할 수 없습니다 : LoadPlugin "C : \ 프로그램 파일 (86)를 \ AviSynth 2.5 \ 플러그인 \ xxxMYPLUGINxxx.dll"당신의 도움에 대한

감사합니다.

답변

2

나는 이런 식으로 뭔가가 종속성 워커 얻을 때 시도 우선 :

http://www.dependencywalker.com/

그것은 가능한 모든 문제를 잡을 것이다, 그러나이 DLL을 누락 (간단한 문제가 있는지 확인하기가 매우 빠르다, 누락 된 수출). 또한 파일 확장명을 두 번 클릭하여 열 수 있도록 설정할 수 있습니다. 나는 보통 .dll, .ax, .ocx, .sys, .exe를 설정합니다.

중 하나입니다. Windows 개발자를위한 필수 도구.

PS : 종속성 워커는 어떤 문제를 발견하지 않는 경우, LoadLibrary()당신의 DLL을로드하고 어떤 GetLastError() 수익을 참조하려고합니다. BTW


:

나는 또한 나의하면 DllMain에서에서 LoadLibrary를 사용하여 시도했지만 여전히 작동하지 않습니다.

LoadLibrary()DllMain() (으)로 부를 수 없습니다.

단순한 초기화 또는 종료 작업 만 수행하면됩니다. DLL로드 순서에서 종속성 루프를 만들 수 있으므로 LoadLibrary 또는 LoadLibraryEx 함수 (또는이 함수를 호출하는 함수)를 호출하면 안됩니다.

+0

오케이.DllMain()에서 LoadLibrary()에 대한 호출을 제거했습니다. 이제는 내 DLL과 FFTW DLL에서 LoadLibrary를 호출하는 아주 간단한 콘솔 응용 프로그램을 작성했습니다. 두 경우 모두 내가받는 HResult는 "0x8007007e - 지정된 모듈을 찾을 수 없습니다"입니다. – xlat808

+0

의존성 워커로 확인하십시오. 아마도 누락 된 가져 오기입니다. –

0

FFTW DLL이 AVS 스크립트가 아닌 AVISynth 플러그인 디렉토리와 같은 디렉토리에 있어야했다는 것을 밝혀합니다 (진입 점 함수를DllMain입니다). Virtual Dub의 작업 디렉토리라고 생각합니다.

어쨌든 이제 작동합니다. 도와 주셔서 감사합니다!