joe 发表于 2022-6-7 16:29:04

C#调用c/c++生成的dll中的可变参数函数

今天遇到一个基础问题:用c/c++代码生成的dll库,在c#中需要用到这个dll库,而且dll库中有函数的参数是可变长度,那么c#中如何声明呢?在解决这个问题之前,大家要明白一件事情:这里提到的可变参数方法,指的是具有 CallingConventions.VarArgs 调用约定的方法,而不是包含 params 参数的方法。
C/C++ 中的函数形式
void fun(unsigned int arg1, const char *format, ...);
C# 中的调用方法
方法1:使用__arglist
使用可变参数列表。

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(),而不能省略掉。




页: [1]
查看完整版本: C#调用c/c++生成的dll中的可变参数函数