2010-04-28 5 views
0

내 프로젝트의 __declspec (dllexport)에서 이상한 동작이 발생했습니다. 클래스, 네임 스페이스, try-catch 및 기타 cpp 요소를 사용하는 C++ 프로젝트가 있습니다. 이 DLL에서 더미 함수를 내보낼 때 다른 C 프로젝트에서 LoadLibrary ('module not found'오류 발생)를로드 할 수 없습니다.C++ 프로젝트에서 DLL 내보내기

C 프로젝트를 통해 동적으로 C++ DLL을로드 할 수 있습니까? 이 프로젝트는 Windows Mobile 프로젝트이지만 일반 PC win32에서와 동일한 방식으로 작동해야합니다.

나는 그것에 붙어있어 어떤 도움을 주시면 감사하겠습니다.

감사합니다. 에밀.

+0

GetLastError가 반환하는 오류 코드는 무엇입니까? 또한 조금 아래 라인에, C 장식, 일명 extern "C"에 대한 수출 sutup, 그렇지 않으면 GetProcAddress 꾸며진 C + + 함수에 대한 더 많은 작업을해야합니다 – Necrolis

답변

0

문제점을 발견했습니다. 그것은 정말로 의존성 dll 문제였습니다. 로드하는 DLL의 디렉토리에서 찾을 수 없습니다. 감사합니다.

3

LoadLibrary은 모듈을 컴파일하는 데 사용 된 언어를 완전히 무시합니다. LoadLibrary에서 모듈을 찾을 수 없다고 말하면 은 실제로 찾을 수 없습니다.. 올바른 파일 이름을 지정했는지 확인하십시오. 드라이브와 경로가 포함되어 있다면 드라이브가 올바른지 확인하십시오. 드라이브 또는 경로를 포함하지 않은 경우 LoadLibrary을 찾을 수있는 파일이 있는지 확인하십시오. 검색하는 곳은 Dynamic-Link Library Search Order입니다. 또한 Windows Vista의 디렉터리 가상화 기능이 방해가되는지 여부도 고려하십시오.

일단 DLL이로드되면 C 코드에서 C++ DLL을 사용하는 데 몇 가지 다른 문제가있을 수 있습니다. C++ 컴파일러는 함수 이름을 변경했을 수 있으므로 GetProcAddress을 호출 할 때 올바른 이름을 제공해야합니다. C++ 코드는 C 코드에서 기대하는 것과 다른 호출 규칙을 사용할 수 있으므로 C++ 코드, C 코드 또는 둘 다에서 선언을 변경해야 할 수도 있습니다. C++ 함수가 클래스 또는 다른 C++ 특정 유형에 대한 포인터를 수신하려는 경우 API가 C와 호환되도록 C++ 코드를 변경해야합니다. DLL이 호스트 프로그램이 비워야하는 메모리를 할당하거나 그 반대의 경우 , 두 모듈이 동일한 메모리 관리자를 사용할 수 있는지 확인해야합니다.

보고하는 문제와 별개로 OS가 파일을 찾을 수 없다는 것뿐입니다. 먼저 그것에 집중하십시오.

+0

나는 하나의 함수를 내 보냅니다 : extern "C "__declpesc (dllexport) int test(); 그리고 GetProcAddress에 연결할 수 없습니다 ... LoadLibrary가 오류를 발생시킵니다. 이 함수에 주석을 달고 수출이없는 경우 LoadLibrary는 훌륭하게 작동합니다. 따라서 프로젝트 설정이나 C-C++ 호환성에 문제가있을 수 있습니다. – user328124

관련 문제