背景
我在C ++中编写了以下函数:
extern "C" __declspec(dllexport) int test(const char*, ...);
我正在使用P / Invoke从C#中调用它:
[DllImport("foo/bar.dll", EntryPoint = "test")]
public static unsafe extern int __unmanaged__test(byte* buffer, __arglist);
<小时/> 的问题:
__arglist
,这意味着我有Array<object>
,我必须在调用C ++函数之前将其转换为__arglist
。
我尝试过以下操作,但它返回编译错误:
unsafe {
byte[] buffer = ....
object[] args = ....
// ....
fixed (byte* ptr = buffer)
return __unmanaged__test(ptr, __arglist(args)); // <--ERROR
}
有谁知道解决这个问题的方法?
<小时/> 对于那些不知道
__arlist
的人:http://bartdesmet.net/blogs/bart/archive/2006/09/28/4473.aspx
答案 0 :(得分:0)
引用:
如果你需要动态构建__arglist(也就是说,你事先不知道参数的类型和数量),你可能不得不使用反射。
例如,请参阅stackoverflow.com/questions/29458616/…