DllImport参数属性

时间:2014-03-13 13:51:19

标签: c# c++ pinvoke 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);

2 个答案:

答案 0 :(得分:1)

没有。您可以使用const而不是变量。

如果您有充分的理由(即不是简单地避免重复声明),您可以{/ 3}}通过p /调用LoadLibrary - > GetProcAddress然后通过UnmanagedFunctionPointer调用导出。

答案 1 :(得分:0)

这不是关于DllImport和p / invoke关于C#属性语言功能的问题。你可以纯粹用属性知识回答这个问题。关键知识是属性的参数必须是恒定的。由于这些参数是在编译时评估的,因此它们不能是变量。

所以答案是你的问题中的代码没有编译,因为你试图使用变量作为属性的参数。您可以将参数更改为常量,如下所示:

private const string dllName = "Second.dll";

[DllImport(dllName)]
....