使用C#访问C DLL时,间歇性访问违规
Intermittent Access Violation when using C# to access C++ DLL
我正在从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();
此测试的工作时间非常完美,然后突然间。
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时DLL_PROCESS_ATTACH
和DLL_PROCESS_DETACH
时,该过程结束/DLL卸载时。
相关文章:
- 从C++dll访问C#中的一行主要参数
- 使用c#访问c++dll中带有char*参数的函数时发生AccessViolationException
- 跨 DLL 边界访问虚拟方法是否安全/可能?
- 在类 12.exe 中0x7B37FF80 (ucrtbased.dll) 引发异常: 0xC0000005:访问冲突读
- 从 exe 和 dll 访问静态库中的 extern 变量
- 从Delphi调用C++DLL时发生访问冲突
- 在 DLL 中嵌入 Python:Py_DECREF列表对象时访问冲突读取位置
- 将 std::string 作为参数从一个 DLL 传递到另一个 DLL 引发访问冲突错误
- 如果使用低于 VS2015 的 vc++ 编译器版本编译,则 DLL 中的访问冲突
- x64 DLL 堆栈访问超出范围?
- Windows错误:异常:使用从C++到Python的ctypes创建DLL时出现访问冲突或Windows错误193
- 在尝试访问 DLL 函数时从 JVM 获取EXCEPTION_ACCESS_VIOLATION
- 如何从调用程序访问 DLL 的变量?
- 访问 DLL 中的 LStrHandle
- C++:使多个进程同时访问 DLL
- 从PHP DLL访问DLL函数
- Python -sip:如何从Python和c++访问DLL
- 访问dll方法时的访问冲突读取位置
- 访问DLL中的重载函数
- 用于c++的Python: wrapper需要访问.dll文件