C#DLL异常未在非托管C ++中捕获

罗伯特·理查森

作为本锻炼的一部分,我熟悉了通过COM在非托管C ++中使用C#DLL的过程,我试图了解异常处理的工作原理。我写了一个很小的C#dll,它只包含引发异常的functon和调用该函数并试图捕获该异常的C ++函数。

这是使用Visual Studio 2012用C#编写的DLL:

namespace ExceptionThrowingLib
{
    public interface IExceptionThrower
    {
        void ThrowException();
    }

    public class ExceptionThrower : IExceptionThrower
    {
        public ExceptionThrower() { }
        public void ThrowException()
        {
            using (StreamWriter writer = new StreamWriter("c:/misc/exceptionthrower.txt", true))
            {
                writer.WriteLine("Exception generation request received at " + DateTime.Now.ToString());
            }
            throw new Exception("This is a requested exception.");
            using (StreamWriter writer = new StreamWriter("c:/misc/exceptionthrower.txt", true))
            {
                writer.WriteLine("This should never appear in the output file.");
            }
        }
    }
}

这是尝试使用它的函数,该函数使用Visual Studio 2008以C ++编写:

void HandleException()
{   
    IExceptionThrowerPtr pThrower(__uuidof(ExceptionThrower));
    try
    {
        pThrower->ThrowException();
        AfxMessageBox(_T("No exception caught."));
    }
    catch (...)
    {
        AfxMessageBox(_T("I caught an exception!"));
    }
}

当我调用此函数时,出现“未捕获异常”消息。

我希望客户端(C ++)端能够捕获_com_error对象并对其进行适当处理以了解发生了什么,但是似乎没有发现任何问题。为什么不?难道我做错了什么?

谢谢。

极光

您是否使用#import生成_com_ptr实现?

如果是这样,请注意忽略raw_interfaces_only指令,因为它会禁止错误处理包装函数的生成。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章