2014-03-13 46 views
-3

我可以替代名稱庫嗎?屬性的DllImport參數

例如:

現在

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

private static string dllName = "Second.dll" 

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

您測試了嗎?您可以通過嘗試幾秒鐘找到答案。 –

回答

1

號你可以使用一個常量,但不是一個變量。

如果你有一個很好的理由(即不是簡單地避免重複申報),你可以用p do it dynamically /調用LoadLibrary - >GetProcAddress然後通過UnmanagedFunctionPointer調用出口。

0

這不是一個關於DllImport和p/invoke作爲關於C#屬性語言功能的問題。你可以純粹用屬性知識來回答這個問題。關鍵的知識是屬性的參數必須是恆定的。由於這些參數是在編譯時評估的,因此它們不能是變量。

所以答案是,你的問題中的代碼不會編譯,因爲你試圖使用一個變量作爲參數的屬性。您可以將參數更改爲常數,如下所示:

private const string dllName = "Second.dll"; 

[DllImport(dllName)] 
....