【发布时间】:2021-10-24 06:32:47
【问题描述】:
我一直在使用自定义 C++ DLL,但在删除使用 [DLLImport] 从 C# 传递的 C++ 中的数组时遇到问题。当它运行时,它给了我异常 System.AccessViolationException。
非常感谢任何帮助。
__declspec(dllexport) void empty(Game* x[], int y)
{
try
{
delete x[y];
}
catch (const std::exception& exc)
{
// catch anything thrown within try block that derives from std::exception
ExceptionOutput << exc.what();
}
}
【问题讨论】:
-
只有创建数组的 dll 才能删除它。
-
标准 C++ 的内存管理与 C# 非常不同。如果 C# 创建了您要删除的对象,C++ 可能没有来自它自己的 freestore 的记录,并且不知道如何将其放回原处。您可能需要提供一个 C++ 代码可以调用的函数来释放它。
-
show minimal reproducible example 这样我们就可以看到所有必要的代码,因为这些代码并不是孤立存在的
标签: c# c++ exception dll dllimport