Непонятный краш приложения в Win32
Модератор: Модераторы
- BadBoyAlex
- постоялец
- Сообщения: 119
- Зарегистрирован: 08.06.2010 12:42:23
- Откуда: Россия, Белгород
- Контактная информация:
Непонятный краш приложения в Win32
Всем привет и всех с Праздником!
Ребят, подскажите, что не так. Есть приложение. Оно нормально работает в Win64, но когда компилирую в Win32, происходит это:
Что это и как лечить?
Ребят, подскажите, что не так. Есть приложение. Оно нормально работает в Win64, но когда компилирую в Win32, происходит это:
Что это и как лечить?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
BadBoyAlex писал(а):но когда компилирую в Win32
Компилируете или запускаете программу?
- BadBoyAlex
- постоялец
- Сообщения: 119
- Зарегистрирован: 08.06.2010 12:42:23
- Откуда: Россия, Белгород
- Контактная информация:
Vadim писал(а):BadBoyAlex писал(а):но когда компилирую в Win32
Компилируете или запускаете программу?
Действительно, когда запускаю.
-
Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
BadBoyAlex, запустите приложение под gdb и посмотрите где падает
- BadBoyAlex
- постоялец
- Сообщения: 119
- Зарегистрирован: 08.06.2010 12:42:23
- Откуда: Россия, Белгород
- Контактная информация:
Padre_Mortius писал(а):запустите приложение под gdb и посмотрите где падает
А как это сделать-то?
-
Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
BadBoyAlex писал(а):Что это и как лечить?
Больше информации для гадания надо.
dll какие то загружаются в ней?
Padre_Mortius писал(а):Как-то так
Интересно, решил испробовать вашу инструкцию и завис. Где скачать файл gdb.exe. Может подскажите?
Отсюда http://www.gnu.org/software/gdb/download/
Зашел сюда http://ftp.gnu.org/gnu/gdb/
Скачал архив gdb-7.9.tar.xz
gdb.exe там не могу найти.
-
Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
resident, обычно рядом с fpc лежит в папке bin
Padre_Mortius спасиб, нашел в другой папке
Код: Выделить всё
C:\lazarus\mingw\i386-win32\bin- BadBoyAlex
- постоялец
- Сообщения: 119
- Зарегистрирован: 08.06.2010 12:42:23
- Откуда: Россия, Белгород
- Контактная информация:
Итак, вот, что выдаёт GDB:
Из разбора понял, что ошибка возникает в вызове DLL, НО! в Win64 работает! Что не так с Win32 понятия не приложу.
Из разбора понял, что ошибка возникает в вызове DLL, НО! в Win64 работает! Что не так с Win32 понятия не приложу.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
BadBoyAlex, а dll у вас не 64битная?
- BadBoyAlex
- постоялец
- Сообщения: 119
- Зарегистрирован: 08.06.2010 12:42:23
- Откуда: Россия, Белгород
- Контактная информация:
Лекс Айрин писал(а):а dll у вас не 64битная?
нет, 32-битная
- BadBoyAlex
- постоялец
- Сообщения: 119
- Зарегистрирован: 08.06.2010 12:42:23
- Откуда: Россия, Белгород
- Контактная информация:
После небольшого разбора: крашится от ошибки в обращении к памяти.
Вот процедура в библиотеке:
Вот в коде:
Что не так?
Вот процедура в библиотеке:
Код: Выделить всё
procedure MyFmtStr (var VStr: PChar);
var Str: String;
begin
Str:= VStr;
Str:= Format(Str, [1,2,3]);
VStr:= PChar(Str);
end;
Вот в коде:
Код: Выделить всё
function MyFmtStr (const AStr: String): String;
var DLLInst: THandle;
MyProc: procedure (var VStr: PChar);
Str: PChar;
begin
DLLInst:= SafeLoadLibrary('StrFrmtDll.dll');
@MyProc:= GetProcAddress(DLLInst, 'MyFmtStr');
Result:= AStr;
Str:= PChar(AStr);
try
MyProc(Str);
finally
Result:= Str;
FreeLibrary(DLLInst);
end;
end;
//Собсно, сам вызов функции
//...
ShowMessage(MyFmtStr('Мы считали барашков: %d, %d пришли, а вот %d заблудился...'));
//...
Что не так?
BadBoyAlex писал(а):Что не так?
Ссылка на Str, которая живет только в рамках MyFmtStr.
