我目前正在使用以下函数来打印我的调试字符串:
void Script::OutputDebugStringN(const char *format, ...)
{
char outstring[256];
memset(outstring, 0, sizeof(outstring));
try
{
va_list args = {0};
va_start(args, format); //args = (va_list) (&format+1);
vsprintf(outstring, format, args);
va_end(args);
OutputDebugString(outstring);
}
catch (...) //most likely reference val arg error (va_list doesn't support ref args)
{
OutputDebugString("[OutputDebugStringN] Something went wrong\n");
}
}
每次发送参考值参数时,我都会收到“Editor.exe 中发生‘System.AccessViolationException’类型的未处理异常”错误消息;这是完全可以理解的,但我想知道如何将它封装在一个可能的 try catch 语句中,以防止错误关闭我的整个程序。(以上不起作用)
我目前正在从我的 c# 编辑器中调用自制的 c++ dll(具有上述功能)。
这是c#代码:
private void ComponentDispatcher_ThreadIdle(object sender, EventArgs e)
{
//render display window (if something is not blocking it)
if (renderViewHost.Update)
{
try { NativeMethods.UpdateRenderWindow(); }
catch (Exception exc)
{ Debug.WriteLine("[ThreadIdle::UpdateRenderWindow] Exception caught: {0}" + exc); }
}
}
我只是觉得打印调试字符串的函数本身就有错误是不可接受的。有任何想法吗?欢迎所有关于不良代码/观察的评论。