DllImport를 사용하여 C#에서 DLL을 동적으로 로드
C#의 DllImport
속성은 기본 DLL 함수와의 통합을 단순화합니다. 그러나 DLL의 위치가 시스템마다 다를 수 있는 경우 상수 문자열 경로에 대한 요구 사항이 문제가 됩니다. 이 문서에서는 런타임 시 DLL 경로를 동적으로 지정하는 솔루션을 살펴봅니다.
DllImport를 통한 상대 경로의 도전
다음과 같이 DllImport
속성 내에서 직접 상대 경로를 사용합니다.
<code class="language-csharp">[DllImport("myLibFolder\myDLL.dll", CallingConvention = CallingConvention.Cdecl)] public static extern int DLLFunction(int Number1, int Number2);</code>
DllImport
에는 리터럴 문자열이 필요하기 때문에 실패합니다. 이로 인해 DLL 위치가 변경될 수 있는 배포 문제가 발생합니다.
권장 접근 방식: 기본 DLL 검색 순서 활용
가장 효율적인 솔루션은 DLL을 전략적으로 배치하고 Windows DLL 검색 순서를 활용하는 것입니다. 이 주문은 다음 위치에 우선순위를 둡니다:
PATH
환경 변수에 나열된 디렉터리입니다.DLL을 애플리케이션 디렉토리에 설치하면 런타임 중에 DLL을 안정적으로 찾을 수 있습니다.
대안: SetDllDirectory를 사용한 동적 경로 조정
기본 검색 순서가 충분하지 않은 경우 SetDllDirectory
기능이 동적 솔루션을 제공합니다. 이 Win32 함수를 사용하면 런타임 시 DLL 검색 경로를 변경할 수 있습니다. P/Invoke 선언은 다음과 같습니다.
<code class="language-csharp">[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] static extern bool SetDllDirectory(string lpPathName);</code>
첫 번째 DLL 함수를 호출하기 SetDllDirectory
전에
위 내용은 C#에서 DllImport 경로를 동적으로 지정하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!