2013-08-01 1 views
3

CLR을 인스턴스화하는 네이티브 C++ 응용 프로그램에 호스팅 인터페이스를 추가하고 사용자 지정 appDomainManager 관리되는 어셈블리를 기본 프로세스로로드하는 호출을 제공합니다. 내 네이티브 C++ LoadDLL() 함수에서 들어오는 DLL을 테스트 할 수 있습니다 .net 대 C++ LoadLibrary (dllPath) 호출하여 관리되는 어셈블리에 대한 실패 (NULL) 반환합니다 가정하지만 그것을 찾는 해요 대신 핸들을 반환합니다 (현재 관리되지 않는 프로세스에서 실행중인 CLR 없음). 관리되는 어셈블리에서 관리되지 않는 LoadLibrary() 호출이 정상적인 동작입니까?관리되는 어셈블리 (C#)의 관리되지 않는 프로세스 (네이티브 C++)에서 호출 될 때 LoadLibrary()의 예상되는 동작은 무엇입니까?

LoadLibrary가 관리되는 어셈블리에서 테스트 할 수있는 적절한 진입 점을 어떻게 찾을 수 있는지 잘 모르겠습니다. 문제를 해결할 수있는 방법 (가능한 한 가지 방법)과 구현하려는 방식은 CLR 인스턴스를 사용하여 .net reflection API에 액세스하고 DLL이 먼저 관리되는지 확인하는 것입니다.하지만 LoadLibrary()가 실패를 반환하지 않는다는 사실에 당황스러워하고 여기서 내가 누락 된 것을 이해하고 싶습니다. 동작이 정의되지 않았습니까? 항상 핸들을 반환해야합니까? 그렇지 않으면 관리되는 어셈블리의 구성에 따라 달라 집니까? 참조에 대한 링크가 있으면 감사하겠습니다.

편집 :

질문에 대한 답변은 질문에 대한 답변을 참조하십시오.

+0

.NET 어셈블리는 Windows의 일반 DLL과 모양이 같습니다. 그래서 LoadLibrary 잘 작동합니다. 일반적으로 다음에 수행하는 작업으로 GetProcAddress()를 호출하여 작동하지 않는 DLL의 진입 점을 찾습니다. 순수하게 관리되는 .NET 어셈블리에는 아무 것도 없습니다. 따라서 LoadLibrary를 사용하지 마십시오. 무의미합니다. 많은 _ [예제 코드] (http://support.microsoft.com/kb/953836) _AppDomain 인터페이스를 사용하는 방법을 보여줍니다. –

+0

응답 해 주셔서 감사합니다. 이미 구현 된 _AppDomain 인터페이스가 있고 작업하고 있습니다. 왜 LoadLibrary가 .net 어셈블리에서 실패하지 않았고 정상적인 동작을 확인하려고했는지 궁금했습니다. 어셈블리에서 호출이 성공하여 실제로 아무런 유용한 작업도 수행 할 수 없다는 것이 이상하지 않은가? 이것은 펑키 한 논리 구멍일까요? 또는 관리되지 않는 프로세스에 관리되는 어셈블리를로드 할 때 다른 용도로 사용합니까? – NAW

+0

아니요, 이상하지 않습니다. .NET 어셈블리에는 관리되지 않는 코드가 포함될 수도 있으므로 LoadLibrary + GetProcAddress를 호출하면 이러한 어셈블리에 대해 매우 합리적입니다. DLL에 내 보낸 함수가 없을 때 LoadLibrary를 호출하는 것을 금지하는 Windows에 내장 된 특별한 기능은 없습니다. 리소스를 포함하는 DLL은 예를 들어 완벽하게 유효합니다. –

답변

0

아니요, 그들은 아무것도하지 않을 것입니다. 관리되는 프로그램의 dll/exe는 mscoree (.NET 실행 프로그램 인 mscoree)를 호출하려고하는 스텁 (스텁은 필수이지만 필수) 프로그램입니다. shim은 .net 프레임 워크의 버전을 선택하려고 시도하기 때문에 (그리고 기본 함수 이름은 _CorExeMain이라고 함) 심 (shim) 자체는 .Net 프레임 워크를 부트 스트랩하고 clr 인스턴스를 시작한 다음 내부 IL 코드의 행렬을 시작합니다 PE 그 외에도 리소스 풀 (문자열 풀, 상수 값), 함수 프로토 타입, 상속 및 제네릭 형식과 같이 CIL 컴파일러에서 생성 한 일부 메타 데이터 일뿐입니다.

자세한 내용은 다음을 참조하십시오. http://blog.vuscode.com/malovicn/archive/2007/12/25/net-foundations-net-execution-model.aspx , 실망하지 마십시오.

관련 문제