Я использую DLL, которая выполняет некоторое выделение памяти и возвращает указатель. код что-то вроде этого:Распределение памяти внутри DLL, возвращающее нулевой указатель
ObjectClass *obj = FunctionFromDLL();
obj
является действительным указателем, но obj->SubObject
плохого указатель (0xcdcdcd) Я проверил и FunctionFromDLL()
правильно выделяет SubObject
, этот указатель только получает плохое значение, когда функция возвращается в вызывающий абонент.
Есть ли что-то особенное для DLL, чтобы «поделиться» своей памятью?
Вам не нужно ничего делать с библиотеками DLL, чтобы обмениваться памятью. DLL-файлы находятся в одном и том же адресном пространстве. Ваша проблема - это что-то другое. Вы пытаетесь передать объекты C++ через границы DLL. Это не работает, если у вас нет одинаковых компиляторов с обоих концов и используйте 'dllexport' /' dllimport'. Вы должны рассказать нам больше, прежде чем мы сможем помочь. –
Экспортированная DLL-функция выполняет __declspec (dllexport), и я использую __declspec (dllimport) в импортированном файле .h. Оба проекта скомпилированы с использованием той же Visual Studio. – Guillaume
Не складывается. Должно быть, это то, о чем вы нам еще не говорили. Инициализированная память не становится неинициализированной при прохождении через границу модуля. –