> 백엔드 개발 > C++ > C#에서 DllImport 경로를 동적으로 지정하려면 어떻게 해야 합니까?

C#에서 DllImport 경로를 동적으로 지정하려면 어떻게 해야 합니까?

Patricia Arquette
풀어 주다: 2025-01-15 20:29:44
원래의
574명이 탐색했습니다.

How Can I Specify a DllImport Path Dynamically in C#?

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 검색 순서를 활용하는 것입니다. 이 주문은 다음 위치에 우선순위를 둡니다:

  1. 애플리케이션 디렉토리
  2. 시스템 디렉토리.
  3. 16비트 시스템 디렉토리.
  4. Windows 디렉토리.
  5. 현재 디렉토리.
  6. 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전에

호출하여 원하는 디렉터리를 검색 경로에 임시로 추가하세요. 이는 다양한 DLL 위치를 처리하는 유연한 방법을 제공합니다.

위 내용은 C#에서 DllImport 경로를 동적으로 지정하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿