gpt4 book ai didi

c# - 编码 va_list

转载 作者:可可西里 更新时间:2023-11-01 08:49:58 26 4
gpt4 key购买 nike

我有以下代码:

[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void PanicFuncDelegate(string str, IntPtr args);

private void PanicFunc(string str, IntPtr args)
{
LogFunc("PANIC", str, args);
}

public void LogFunc(string severity, string str, IntPtr args)
{
vprintf($"[{severity}] "+ str,args);
}

[DllImport("libc.so.6")]
private static extern int vprintf(string format, IntPtr args);

这会将格式正确的消息打印到控制台。我想从 args 中检索值以在我自己的记录器中使用它们。

如果我尝试从 args 中的数组中获取每个指针的值(如此处建议:Marshal va_list in C# delegate),我会遇到段错误。

有什么建议吗?

最佳答案

我有一个函数调用,这就是我所做的:

对于 DLLImport,我使用 __arglist 编码到 va_list,

[DllImport("libc.so.6")]
private static extern int vprintf(string format, __arglist);

然后在调用函数时我创建了 __arglist,

vprintf(string format, __arglist(arg1, arg2, arg3...))

当然,您需要使用所有参数静态调用函数或动态构建 __arglist,我这里没有代码,但这是可能的。

我想知道你是否因为 object[] 中的元素没有固定而出现段错误?也许如果你固定 object[] 和其中的所有元素会有帮助?不过只是猜测。

关于c# - 编码 va_list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45463459/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com