有一个原生功能:
int sqlite3_config(int, ...);
我想PInvoke这个功能。目前,我有这个声明:
[DllImport("sqlite3", EntryPoint = "sqlite3_config")]
public static extern Result Config (ConfigOption option);
(结果和ConfigOption是enum Result : int { ... }
形式的枚举。)
我实际上只对这个函数的单参数版本感兴趣而且不需要其他args。这是对的吗?
我也很好奇你将如何声明两个参数形式(也许它需要2个IntPtrs?)。
答案 0 :(得分:8)
您需要使用__arglist关键字(未记录),Bart#有nice blog about it.
示例强>
class Program
{
[DllImport("user32.dll")]
static extern int wsprintf([Out] StringBuilder lpOut, string lpFmt, __arglist);
static void Main(String[] args)
{
var sb = new StringBuilder();
wsprintf(sb, "%s %s %s", __arglist("1", "2", "3"));
Console.Write(sb.ToString());
}
}
对于vararg方法没有标准的方法,大多数解决方案都会将它包装成几种方法,例如。
[DllImport("MyDll", CallingConvention=CallingConvention.Cdecl)]
static extern var MyVarArgMethods1(String fmt,
String arg1);
[DllImport("MyDll", CallingConvention=CallingConvention.Cdecl)]
static extern var MyVarArgMethods2(String fmt,
String arg1, String arg2);