문제

일부 글로벌 데이터로 C ++ Win32 DLL을 만들고 있습니다. 전 세계적으로 정의 된 std :: 맵이 있으며 DLL에는 맵에 데이터를 쓰는 (물론 쓰기 잠금을 획득 한 후) 내보낸 함수가 있습니다.

내 문제는 DLL DLLMAIN 내부에서 쓰기 기능을 호출 할 때 아무런 문제없이 작동한다는 것입니다. 그러나 다른 프로그램에서 DLL을로드하고 데이터를 글로벌 맵에 작성하는 함수를 호출하면 다음과 같은 오류가 발생합니다.

WindowsError: exception: access violation reading 0x00000008

이것에 대해 할 수있는 일이 있습니까? DLLMAIN에서 호출했을 때 동일한 기능은 DLL의 글로벌 데이터에 액세스 할 수 있지만 다른 프로세스에서 호출하면 글로벌 데이터에 액세스 할 수 없습니다. 조언을 해주세요.

TDM-MINGW GCC 4.4.0 컴파일러를 사용하고 있습니다.

편집하다:좋아, 나는 문제가 무엇인지 알아 냈고 도움을주는 사람들에게 감사하지만 문제는 생성자 문제 나 글로벌 공간에지도를 가질 수 없다는 것이 아니라 부스트 :: 파이썬의 문제는 내가 사용. 테스트했지만 파이썬이나 어쩌면 무언가에서 DLL을 호출 한 이후 Urllib2 모듈이 DLL에로드되지 않았습니다. 이제 고치는 방법을 봐야합니다.

도움이 되었습니까?

해결책

생성자처럼 보입니다 std::map 코드가 호출되었을 때 아직 실행되지 않았습니다. Win32 DLL에서 글로벌 비 POD의 수명은 매우 까다 롭고 Mingw가 어떻게 그것을 처리하는지 확실하지 않습니다. 그러나 DLL을 컴파일하는 방식은 자신의 기능을 설정할 수 있습니다.DllMain?) 진입 점으로서, 따라서 생성자를 호출하는 CRT 초기화 루틴을 과다로드립니다.

다른 팁

이러한 낮은 메모리 주소의 읽기 오류는 일반적으로 어딘가에 널 포인터에 액세스하려고한다는 것을 의미합니다. 실제 코드를 보여줄 수 있습니까?

다른 프로세스에는 별도의 주소 공간이 있기 때문에 공유 메모리를 사용해야합니다. STD ::지도가 실행되지 않을 것 같아요. MapViewoffile, CreateEfilemapping, OpenFileMapping 및 일반 기존 데이터를 사용하는 것이 좋습니다. Google / MSDN에게 문의하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top