我可以代替名称库,替换参数吗?
例如:
立即
[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);
答案 0 :(得分:1)
没有。您可以使用const而不是变量。
如果您有充分的理由(即不是简单地避免重复声明),您可以{/ 3}}通过p /调用LoadLibrary
- > GetProcAddress
然后通过UnmanagedFunctionPointer
调用导出。
答案 1 :(得分:0)
这不是关于DllImport
和p / invoke关于C#属性语言功能的问题。你可以纯粹用属性知识回答这个问题。关键知识是属性的参数必须是恒定的。由于这些参数是在编译时评估的,因此它们不能是变量。
所以答案是你的问题中的代码没有编译,因为你试图使用变量作为属性的参数。您可以将参数更改为常量,如下所示:
private const string dllName = "Second.dll";
[DllImport(dllName)]
....