我们有一个C#编写的Web应用程序,它通过COM与Delphi编写的应用程序进行通信。 C#应用程序调用Delphi应用程序的方法来获取所需的数据。当Delphi应用程序出现任何问题时,我们的C#-Code会抛出{
"services": [{
"id": "b2",
"address": {
"location_id": "loc_b2",
"name": "kelaniya-1",
"lon":"" ,
"lat":""
},
"size": [2889]
},{
"id": "b1",
"address": {
"location_id": "loc_b1",
"name": "hunupitiya-2",
"lon": "",
"lat": ""
},
"size": [1700]
}]
}
。
以下是COMException
:
问题:我们希望根据Delphi-Exception的类型处理这些异常。但我们不能,因为它每次都是一个COMException。
问题:如何在C#-Code中识别或映射原始类型的Delphi异常?
答案 0 :(得分:0)
您应该使用Marshal.ThrowExceptionForHR方法来实现此目标。 如果需要,可以通过自定义HR代码结果来增强它。
以下是示例代码:
try
{
...
}
catch (COMException exception)
{
switch (exception.HResult)
{
case -2147418113:
throw new MissingFolderException("Custom exception");
}
Marshal.ThrowExceptionForHR(exception.HResult);
}
MissingFolderException当然是在您的代码中实现的特定异常。
此处提供了更多详细信息:How to: Map HRESULTs and Exceptions
可能发生Delphi代码在某些情况下不会返回不同的异常(HResult对于2个不同的异常是相同的),但是必须修改Delphi代码。