У меня есть собственная (неуправляемая) .dll, написанная на С++, которую нужно вызывать из управляемого процесса (программы на С#). При отладке dll проблема, которую я показал, заключается в том, что когда я создаю объект в dll с ключевым словом new
, я получаю исключение нарушения доступа к системе. Это проявляется только при вызове dll из управляемого процесса, а не при вызове из другой собственной программы.
Код примерно такой:
// Native.dll file
MyClass myInstance; // global variable (and does need to be so)
__declspec(dllexport) uint8_t _stdcall NativeFunction(){
myInstance = new MyClass(); // <-- this causes Access Violation Exception
}
и код С#:
using System.Runtime.Interopservices;
// Loading the dll
[DllImport("Native.dll",CallingConvention = CallingConvention.StdCall)]
private extern static byte NativeFunction();
class TestClass{
byte returnVal = NativeFunction(); //<-- exception in managed context
}
Я знаю, что это как-то связано с тем, что собственный процесс пытается выделить память за пределами разрешенного пространства памяти. Это происходит только тогда, когда память выделяется с помощью new
(по крайней мере, в этом проекте), что мне, к сожалению, нужно использовать. Мой вопрос: кто-нибудь знает, почему это вызывает исключение и как его избежать?