2014-03-13 3 views
-3

이름 라이브러리 대신 매개 변수를 대체 할 수 있습니까? 예를 들어속성의 DllImport 매개 변수

:

지금

[DllImport("First.dll")] 
public static extern bool Info([MarshalAs(UnmanagedType.BStr)] ref string result); 

당신은 const를하지만 변수를 사용할 수 있습니다

private static string dllName = "Second.dll" 

[DllImport(dllName)] 
public static extern bool Info([MarshalAs(UnmanagedType.BStr)] ref string result); 
+1

테스트 해 보셨습니까? 몇 초 후에 답을 찾을 수 있습니다. –

답변

1

번호를 원하십니까.

당신은 좋은 이유 LoadLibrary 호출/P로 할 수 있습니다 do it dynamically (즉, 단순히 반복 선언을 피하지)가있는 경우 - 다음 UnmanagedFunctionPointer를 통해 수출을 호출>GetProcAddress합니다.

0

이것은 DllImport에 대한 질문이 아니며 C# 속성 언어 기능에 대해 p/invoke로 질문합니다. 순전히 속성에 대한 지식으로 질문에 대답 할 수 있습니다. 그리고 핵심 지식은 속성에 대한 매개 변수가 일정해야한다는 것입니다. 이러한 매개 변수는 컴파일 타임에 평가되므로 변수가 될 수 없습니다.

그래서 대답은 속성에 매개 변수로 변수를 사용하려고하기 때문에 질문의 코드가 컴파일되지 않는다는 것입니다. 다음과 같이 매개 변수를 상수로 변경할 수 있습니다.

private const string dllName = "Second.dll"; 

[DllImport(dllName)] 
....