gpt4 book ai didi

.net - 关于调用托管代码中我能想到的最基本的 c++ 函数的 AccessViolationException

转载 作者:行者123 更新时间:2023-11-28 04:00:39 25 4
gpt4 key购买 nike

我正在尝试学习如何使用托管/非托管代码互操作,但我遇到了瓶颈,4 小时的谷歌搜索都无法克服。我在 visual studio 中将 2 个项目放在一起,一个创建 win32 exe,一个创建 windows 窗体 .NET 应用程序。经过一番折腾后,我获得了 C# 代码以正确调用 C++ 代码,但从这里开始,每次进入时我都会收到 AccessViolationException。这是 .cpp 文件中的代码:

        extern "C" __declspec(dllexport) void QuickTest()
{
int iTest = 0;
int aTestArray[3] = {1,2,3};
return;
}

这是调用它的 C# Windows 窗体应用程序中的代码:

        [DllImport("UnmanagedEvaluation2.exe")]
static extern void QuickTest();

很简单吧?调用有效,我能够进入 c++ 代码(我为项目打开了非托管调试),但它每次都在数组创建行上死于 AccessViolationException。当我运行可执行文件时,相同的代码运行良好(c++ 代码在控制台应用程序项目中,我尝试从 _tmain 函数调用它并且没有问题),但是当从 .NET 调用它时,它每次都会崩溃。

这里一定有一些明显的东西是我遗漏的,但我没有从阅读教程中得出任何有用的东西,而且大多数关于该异常的问题帖子都是人们在复杂的编码(marshal)处理或 GCHandles 方面遇到的问题。在此先感谢您的帮助。

更新:你就在下面,但这很奇怪。起初,当我开始这个时,我认为我无法做到这一点(调用可执行文件中的函数),但是当我尝试它时——它确实起作用了,调用就是这样。看起来它可以让您将函数调用到可执行文件中,但是一旦您尝试分配任何内存,它就会死掉。无论如何,感谢您的建议,它现在似乎工作正常。

最佳答案

您不能从这些可执行文件外部调用可执行文件中的函数。您需要将代码编译成 DLL。

关于.net - 关于调用托管代码中我能想到的最基本的 c++ 函数的 AccessViolationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/844169/

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