.NET 4.0으로 작성된 응용 프로그램에서 네이티브 DLL (C로 작성)을 메모리에로드해야합니다.비 관리 DLL을 스트림에서로드하는 방법은 무엇입니까?
현재 DLL이있는 경로를 전달하는 LoadLibrary에 P/Invoke 호출을 사용하고 있습니다.
이 작동하지만이 DLL은 DB에서 제공되기 때문에 스트림을 통해로드 할 수 있는지, 파일 시스템의 어딘가에 DLL을 저장할 필요가 없는지 알고 싶습니다.
.NET 4.0으로 작성된 응용 프로그램에서 네이티브 DLL (C로 작성)을 메모리에로드해야합니다.비 관리 DLL을 스트림에서로드하는 방법은 무엇입니까?
현재 DLL이있는 경로를 전달하는 LoadLibrary에 P/Invoke 호출을 사용하고 있습니다.
이 작동하지만이 DLL은 DB에서 제공되기 때문에 스트림을 통해로드 할 수 있는지, 파일 시스템의 어딘가에 DLL을 저장할 필요가 없는지 알고 싶습니다.
Windows에서 허용하지 않는 경우 항상 네이티브 코드를 디스크의 파일에서로드해야합니다. 이것은 운영 체제가 설계된 방식의 핵심이며 실행 파일은 메모리 매핑 파일을 통해 메모리에 매핑됩니다. 어떤 파일이 필요합니다. 방지하려면 디베이스에서 DLL을 저장, 당신은 일반적으로 UAC 하나 때문에 디스크에 쓸 수 없습니다 만 IL 데이터가 아닌 네이티브 코드이기 때문이다.
그것은 순수 관리 코드에 대한 작업 (Assembly.Load (바이트 []) 또는 바이러스 스캐너 나 IT 직원이 아무데도 나타나지 않는 실행 파일에 대해 상당히 불만을 나타냅니다. 사용자의 컴퓨터에서 작동하지만 사용자 컴퓨터에서 확률이 매우 낮습니다.
PInvoke 특성 사용에 파일 이름을 지정했기 때문에 불가능합니다. PInvoke에는 정적으로 알려진 파일 이름이 필요합니다.
정적으로 파일 이름을 결정할 수 없으면 LoadLibrary 및 GetProcAddress를 사용하여 dll에 포함 된 함수를 호출해야 할 수 있습니다.
또는 반사 방출을 사용하여 PInvoke 기능을 동적으로 방출 할 수 있습니다.
이론적으로는 할 수 있습니다 NET에서 재작 성합니다. https://www.joachim-bauch.de/tutorials/loading-a-dll-from-memory/ –