【发布时间】:2015-11-17 11:51:40
【问题描述】:
背景:
我用 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
【问题讨论】:
标签: c# c++ pinvoke argument-passing