【发布时间】:2015-01-19 15:38:11
【问题描述】:
我正在从 c# 和非托管 DLL 制作一个包装器,除了调用内部使用 HeapSetInformation 的函数外,一切都正常工作。 HeapSetInformation 每次都返回 0。在可视化 C++ 应用程序中调用的相同函数工作正常。由于某些原因,C# 内部无法初始化 LFH。非托管dll不能修改,我也没有源代码。有人知道如何解决这个问题吗?测试环境为 Windows 7 x64 和 Visual Studio 2013 Framework 4.5
最好的问候 GMG
【问题讨论】:
-
移除来电? - Vista 以后使用 LFH automatically,无需您做任何事情。顺便说一句,它设置了
GetLastError(),如果附加了调试器,它将无法工作, -
我不能像前面写的那样修改 DLL,并且在我必须调用的 DLL 函数中调用了 HeapSetInformation。如果我在没有调试器的情况下运行应用程序,我也会遇到同样的错误。
-
从 DLL 调用 HeapSetInformation() 是一件非常犯罪的事情,DLL 不应该永远使用影响进程中所有代码的全局设置。除非它自己创建了堆,在这种情况下,您的 C# 代码无法做任何事情来搞砸它。您至少有两个充分的理由不使用该 DLL,我怀疑我们可以做任何事情来从中减去。尝试将 _NO_DEBUG_HEAP=1 添加到您的环境中。联系所有者寻求帮助。
-
正如之前写的那样,DLL 不是我的,我无法控制它,我不是在这里讨论在其中使用 HeapSetInformation 是否正确,我在这里只是为了询问是否有人有解决方案。所以 -1 是因为我寻求帮助?