gpt4 book ai didi

c++ - 从 C++ 中调用 .NET CLR 时,返回错误

转载 作者:行者123 更新时间:2023-11-30 03:00:11 24 4
gpt4 key购买 nike

我正在从 C++ 调用 .NET 程序集。

这非常适用于我调用的任何测试 .NET 4.0 项目。

但是,当调用包含 20 个子组件的大型项目时,它会失败并出现以下错误:

Failed to execute assembly: 0x80004003. GetLastError=126. dwReturn=1.

这是生成错误的 C++ 代码:

DWORD dwReturn;
hr = pCLR->ExecuteInDefaultAppDomain(szApplication, szEntryType, szEntryMethod, szParameter, &dwReturn);
if (FAILED(hr))
{
// Fails if I try the production assembly, with 20 subassemblies.
printf(" Failed to execute assembly: 0x%X. GetLastError=%d. dwReturn=%d.\n", hr, GetLastError(), dwReturn);
}
else
{
// Works 100% if I plug in a small toy assembly in .NET 4.0.
wprintf(L" Assembly returned: %d\n", dwReturn);
}

环境

  • Visual Studio 2010 SP1。
  • C++ 用于上述代码。
  • 目标程序集的 .NET 4.0。

最佳答案

您的托管代码因 NullReferenceException 而终止。它的Exception.HResult值为0x80004003,E_POINTER。

显然,这是托管代码消亡的一个非常常见的原因。在从托管代码转换回 native 代码的过程中,您将失去很多异常的上下文。这给托管代码带来了负担,以执行一些基本的错误记录,至少是全能的 Exception.StackTrace。 .NET 4 AppDomain.FirstChanceException 事件可能很有用。

通过启用托管代码调试、Project + Properties、Debugging、Debugger Type = Mixed 来调试问题。以及 Debug + Exceptions,用于 CLR 异常的 Thrown 复选框,以便调试器在抛出异常时停止程序。

关于c++ - 从 C++ 中调用 .NET CLR 时,返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12352876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com