|
今天遇到一个基础问题:用c/c++代码生成的dll库,在c#中需要用到这个dll库,而且dll库中有函数的参数是可变长度,那么c#中如何声明呢?在解决这个问题之前,大家要明白一件事情:这里提到的可变参数方法,指的是具有 CallingConventions.VarArgs 调用约定的方法,而不是包含 params 参数的方法。
C/C++ 中的函数形式
void fun(unsigned int arg1, const char *format, ...);
C# 中的调用方法
方法1:使用__arglist
使用可变参数列表。
[DllImport("dlllib.dll", CallingConvention = CallingConvention.Cdecl
public static extern void fun(uint arg1, string message, __arglist);
...
调用时:
fun(4, "Hello %s %d %c", __arglist("argA",6,'a'));
注意参数使用的是 __arglist 关键字,并未指定任何参数类型和参数名称,调用方法时,也必须将可变参数用 __arglist() 括起来,
可变参数方法在调用时,也要特别注意即使不传递任何可选参数,也必须写 __arglist(),而不能省略掉。
|
|