2014-03-13 111 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)] 
....