2016-08-03 2 views
0

스레드 안전하지 않은 DLL이 여러 스레드에서 사용해야합니다. Windows가 전체 파일 경로 또는 DLL/모듈 이름에 관계없이로드 된 DLL을 어떻게 감지하는지 잘 모르겠습니다. 파일 경로가 사용된다면 DLL을 각 스레드별로 별도의 파일에 복사하는 것이 가능하다고 생각합니다. MyLib1.dll, MyLib2.dll, MyLib3.dllLoadLibrary으로로드하십시오.동일한 DLL 복사본에 대한 여러 LoadLibrary

+0

뮤텍스 세마포어와 DLL 호출을 동기화하지 않는 이유는 무엇입니까? – sb9

+0

@ sb9 DLL은 내부 상태를 유지할 수 있으므로 뮤텍스가 충분하지 않을 수 있습니다. – Sergio

+0

또한 뮤텍스는 확장성에 대한 전망을 파괴합니다. –

답변

2

LoadLibrary을 호출 할 때 전체 절대 파일 이름을 사용하고 이러한 절대 파일 이름이 다른 한 여러 인스턴스를로드 할 수 있습니다.

개인적으로 나는 스레드를 만든 다음이 DLL을 <threadID>.dll이라는 임시 폴더에 복사합니다. 그것은 이름의 유일성을 보장 할 것입니다.

+0

다른 파일 경로는 있지만 내보내기 테이블의 DLL 이름이 같은 두 개의로드 된 DLL이있는 경우는 어떻습니까? 나중에 로딩 될 다른 모듈에 대한 수입을 해결하기 위해 로더 중 어느 것을 사용해야합니까? – Sergio

+0

이 접근 방식은 각 dll에 대해 고유 한 메모리를 만드나요? –

+0

@simon 그 질문은 부정확합니다. 고유 한 메모리로 무엇을 의미합니까? –

관련 문제