C#의 DllImport는 런타임 동적 경로를 지원합니까?
C#에서 DllImport
특성을 사용하는 경우 일반적으로 DLL에 대한 경로를 정적으로 지정해야 합니다. 그러나 애플리케이션의 설치 경로가 사용자에 따라 달라지는 경우(예: C:UsersuserName...) 절대 경로를 하드코딩하는 것은 실용적이지 않습니다.
기존 방식
이 문제에도 불구하고 상대 경로를 사용하는 것이 좋습니다. DLL 이름만 지정하면 시스템이 응용 프로그램 디렉터리 및 기타 사전 정의된 위치(Windows DLL 로딩 지침에 따라)에서 해당 DLL을 검색합니다.
SetDllDirectory 및 P/Invoke
상대 경로가 필요에 맞지 않으면 SetDllDirectory
기능 사용을 고려해 보세요. 이 기능을 사용하면 런타임 시 기본 DLL 검색 경로를 수정하여 해당 시점에 계산되는 동적 경로를 지정할 수 있습니다.
SetDllDirectory
을 사용하려면 Windows API 함수인 P/Invoke를 사용해야 합니다. 해당 내용은 다음과 같습니다.
<code class="language-csharp">[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] static extern bool SetDllDirectory(string lpPathName);</code>
업적
코드는 다음과 유사해야 합니다.
<code class="language-csharp">SetDllDirectory(Path.GetTempPath() + "..\myLibFolder"); [DllImport("MyAppDll.dll")] static extern bool MyGreatFunction(int myFirstParam, int mySecondParam);</code>
이렇게 하면 시스템의 표준 검색 순서 이전에 런타임 포크가 포함된 위치로 DLL 검색 경로가 리디렉션됩니다.
장점
SetDllDirectory
함수를 사용하면 사용자의 컴퓨터나 설치 경로에 의존하지 않고 DLL의 런타임 위치를 동적으로 지정할 수 있습니다.
위 내용은 동적 DLL 경로를 C#의 DllImport와 함께 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!