2009-05-08 3 views
5

Microsoft Visual C++로 C 모듈로 작성된 JD Edwards 비즈니스 기능이 있습니다. 타사 DLL에 액세스하려면 LoadLibrary를 사용하고 있습니다. 독립 실행 형 테스트 프로그램에서는 코드가 제대로 실행됩니다. JDE 내에서 실행하면 LoadLibrary가 NULL을 반환하고 GetLastError가 126을 반환합니다. 이는 MSDN에 따라 The specified module could not be found을 의미합니다. DLL에 대한 전체 경로를 넣으려고했지만 예, 경로의 \ 문자를 두 번 기억했습니다. 차이 없음.LoadLibrary로 DLL을로드하지 못하게하는 요인은 무엇입니까?

DLL을로드하지 않도록하는 종속성이 없는지 확인했습니다. DUMPBIN/부양 가족은 다음을 반환

WSOCK32.dll 
USER32.dll 
GDI32.dll 
WINSPOOL.DRV 
ADVAPI32.dll 
KERNEL32.dll 

은이 표준 Windows DLL을 같이, 그래서 나는 손실에 있어요.

답변

5

종속성이 누락 되었습니까? 참조 된 모든 라이브러리가 발견 된 Dependency Walker을 확인 했습니까?

+0

필자는 필자가 필요로했던 지 오래되었지만 필자는 Dependency Walker를 완전히 잊었다. DLL 지연 dwmapi.dll을로드하지 못했습니다. 비스타 만 이해합니다. 그게 문제라고 생각하지 않지만 포인터에 감사드립니다. –

+0

% windir % \ system32와 같이 경로에있는 폴더로 dll을 이동하는 방법은 어떻습니까? –

0

ProcMon이 실행되는 동안 테스트를 시도하고 파일 모니터링이 활성화되어있는 동안 오류가 표시되는지 확인하십시오.

3

LoadLibrary 호출 중에 디버거를 연결하면 디버그 출력에 오류 정보가 표시 될 수 있습니다. 여기에있는 다른 제안 외에도 매니페스트에 오류가있는 경우이 문제가 발생합니다.

나는 당신의 의존성 문제에 대해 확신한다. ProcMon을 시험해보고 Vista에서 실행하여 문제가 해결되는지 확인하십시오. 테스트 용 VPC 이미지 here을 얻을 수 있습니다.

+0

지금 당장 DLL에 문제가있어이 대답이 도움이되었습니다. 오류 126이 발생하고 디버거에서 DLL에 대한 심볼이로드 된 다음 즉시 언로드되었다는 것을 알게되었습니다. DLL 경로 문제가 아닌, 내가 알아 내지 못한 종속성 문제가 의심됩니다. –

1

나는 한 번 같은 악몽에 빠졌습니다. 아무것도 진단 할 수 없었습니다. 방금 dll 검색 목록 순서 경로를 다시 설정한다는 것을 알았습니다. 여기에 키워드는 '순서'가 아니라 '목록'일 것입니다.

SetDllDirectory (NULL);

중간에있는 제 3 자 DLL이 원래 상태를 복원하지 않고 그걸로 엉망이었을 것이라는 설명입니다. 이것은 왜 테스트 애플리케이션 만 작동하는지 설명 할 수 있습니다.

+0

포인터에 감사드립니다. SetDllDirectory에 대해 알지 못했습니다. 이 경우 파일 이름에 DLL에 대한 전체 경로가 있었기 때문에 중복되어 있어야합니다. –

+0

필자의 경우 DLL 자체가 다른 DLL에 종속되어 있기 때문에 dll에 대한 전체 경로로도 작업하지 않았습니다. – Jem

0

추가로 프로필 옵션을 사용하여 Dependency walker을 실행할 수 있습니다. 이 경우 exe는 종속성 워커에로드해야합니다. Afetrwards 메뉴 "프로필"을 사용할 수 있습니다.

응용 프로그램이 시작되고 dll 트리가 채워집니다. 또한 지연 로딩 dll이 누락 된 경우 및 기타 항목을 표시합니다.

0

종속성을 확인하여 답을 찾지 못하면 아키텍처로 인해 발생할 수있는 문제에 집중하는 것이 좋습니다.

당신은 독립 실행 형 테스트 환경을 사용하고 있다고 말했지만 일반 환경에서 시도하면 작동하지 않습니다. 비즈니스 기능이 서버에서 실행되도록 설정되어 있습니까?

JDE에서 마지막으로 작업 한 이후로 꽤 오래되었습니다. 한 번은 C에서 BSFN을 작성하여 일종의 동기화 (synchonization)로 여러 UBE를 호출했으며 내 로컬 컴퓨터에서 제대로 작동하고 서버에서 테스트 할 때 작동하지 않았다는 것을 기억합니다. 서버가 DLL을 찾을 수 없다는 것 (경로를 제공하고 있음에도 불구하고)과 필요한 일부 설정이있었습니다. 또한 내 경우에는 중요한 차이가있었습니다. 내 컴퓨터에서 BSFN은 UBE의 완료를 기다리고 서버에서 상태를 포착하고 서버에서는 객체에 대한 설정과 관련이 있습니다. .

유용한 정보가 없으면 www.jdelist.com에서 도움을 요청하십시오.

관련 문제