Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将C#中的win32错误传递给Powershell_C#_Powershell_Error Handling - Fatal编程技术网

如何将C#中的win32错误传递给Powershell

如何将C#中的win32错误传递给Powershell,c#,powershell,error-handling,C#,Powershell,Error Handling,我有一个PowerShell脚本,它使用我从其他地方借用的C代码创建了一个新类型。我发现,尽管我可以捕获PowerShell错误,但当错误来自对类型引用的DLL的函数调用时,我不会得到任何反馈 C#代码(我复制的)有一个Try/Catch语句,如下所示: try { int retVal = AddFontResource(fontFilePath); bool posted = PostMessage(HWND_BROADCAST, WM.FONTCHANGE, IntPtr.Ze

我有一个PowerShell脚本,它使用我从其他地方借用的C代码创建了一个新类型。我发现,尽管我可以捕获PowerShell错误,但当错误来自对类型引用的DLL的函数调用时,我不会得到任何反馈

C#代码(我复制的)有一个Try/Catch语句,如下所示:

try {
   int retVal = AddFontResource(fontFilePath);
   bool posted = PostMessage(HWND_BROADCAST, WM.FONTCHANGE, IntPtr.Zero, IntPtr.Zero);
   return retVal;
}
catch { return 0; }
调用“gdi32.dll”的函数。在PowerShell中,我有一个Try/Catch,其中包括:

Catch { Write-Warning "$($error[0].ToString())" }
如果失败发生在
AddFontResource(fontFilePath)
调用上,PowerShell会“捕获”出现错误(尽管我不确定如何),但
$error
为null,“捕获”会创建自己的错误

如何捕获来自DLL函数的错误并将其传递给PowerShell,以便在出现故障时至少向我提供一些附加信息

做一些研究,我认为这将取代C#code中的catch语句,但我不知道如何造成测试失败

catch { throw new Win32Exception(Marshal.GetLastWin32Error()); }
有人能证实和/或提高我的理解吗


谢谢

From:“如果函数失败,返回值为零。没有扩展的错误信息。”。我会在C#code中添加一个检查,比如
if(retVal==0){throw new Exception(“Adding fonts failed”);}
,然后在PowerShell中使用该异常。它要么作为标准错误返回,要么作为标准输出返回。请看:@jdweng不是真的。另一个评论是准确的。