作为本锻炼的一部分,我熟悉了通过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] 删除。
我来说两句