gpt4 book ai didi

c# - 使用 C# 访问 C++ DLL 时出现间歇性访问冲突

转载 作者:行者123 更新时间:2023-11-30 05:43:39 25 4
gpt4 key购买 nike

我正在从 C# 链接到一个相当复杂的 C++ DLL。我需要创建很多 dllexport 函数,以便我可以在 c# 中使用 dll。首先,我添加了一个 .cpp 文件并创建了一个简单的测试函数:

C++:

extern "C" __declspec(dllexport) int32_t Test(){
return 10;
}

c#:

[STAThread]
static void Main()
{
Console.WriteLine(Test());
}

[DllImport("Test.dll", EntryPoint = "Test", CallingConvention = CallingConvention.Cdecl,ExactSpelling = true)]
public static extern Int32 Test();

这个测试在 90% 的时间里都能完美运行,然后突然......

The program '[4712] Test.vshost.exe' has exited with code -1073741819 (0xc0000005) 'Access violation'.

一切似乎都很好,不知道是什么原因导致的,甚至不知道如何开始追踪问题。这么断断续续的,真是奇怪。我真的不是 C++ 程序员,所以我不知道是什么导致了这种行为,甚至不知道如何调试和发现问题。

希望有好心人能帮忙。

最佳答案

这个

SetLastError = true

除非您使用 Windows API,否则没有用。

并设置

CallingConvention = CallingConvention.Cdecl

喜欢

[DllImport("Test.dll", EntryPoint = "Test", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]

请注意,除了您的方法之外,还有其他代码可以执行。 DLL 可以(而且经常)有一个 DllMain方法。通常在这个方法中初始化 dll 的“全局”变量,必须调用一次的方法也是如此。此方法通常至少调用两次:DLL_PROCESS_ATTACH 加载 dll 时和 DLL_PROCESS_DETACH 进程结束/卸载 dll 时。

关于c# - 使用 C# 访问 C++ DLL 时出现间歇性访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30121129/

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