Опитвам се да предам указател към структура към друг процес, който съм създал… Получавам само грешки при невалиден указател в процеса. Изпращам и указателя… Това изобщо възможно ли е в .NET?
Моят код за процеса на изпращане:
' Initialize unmanged memory to hold the struct.
Dim ptrSettings As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(EngineSettings))
' Copy the struct to unmanaged memory.
Marshal.StructureToPtr(EngineSettings, ptrSettings, False)
SendMessage(HWND, MSG_SETTINGS_STRUCT, 0, ptrSettings)
Заменям WinProc във втория процес, за да получа съобщението в LParam:
EngineSettings = CType(Marshal.PtrToStructure(ptr, GetType(SettingsStruct)), SettingsStruct)
' Free the unmanaged memory.
Marshal.FreeHGlobal(ptr)
Указателят е една и съща стойност между двата процеса, ето грешката във втория процес:
Кодът на грешката е 0xc0000005. Тази грешка може да е грешка в CLR или в опасните или неподлежащи на проверка части на потребителския код. Често срещаните източници на тази грешка включват грешки при маршалинг на потребители за COM-interop или PInvoke, които могат да повредят стека.