【发布时间】:2011-07-14 14:13:39
【问题描述】:
我只是想进行一些托管/非托管互操作。为了获得扩展的错误信息,我决定注册 dll 提供的日志回调:
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public unsafe delegate void LogCallback(void* arg1,int level,byte* fmt);
这个定义有效,但我得到了像“格式 %s 用 size=%d 和 score=%d 探测的字符串”。 我尝试添加 __arglist 关键字,但代表不允许使用它。
嗯,这对我来说并不那么戏剧化,但我只是好奇是否可以在 C# 中获取可变参数。 我知道我可以使用 c++ 进行互操作。 那么:有没有办法在合理的努力下纯粹在 C# 中做到这一点?
编辑:对于那些仍然没有得到它的人:我不导入一个可变参数函数但将它作为回调导出,它然后称为我的本机代码。我一次只能指定一个 -> 只能指定一个重载并且 __arglist 不起作用。
【问题讨论】:
-
我在发布stackoverflow.com/questions/10361369/… 之前遇到了这个问题。我认为它是相似的,并且我找到了一个适合我的实现。 HTH。
-
This 可能有用。
标签: c# pinvoke variadic-functions