Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Интеграция FastMM4 в Delphi 7: запуск приложений и отображение логов

Delphi , Программа и Интерфейс , Процессы и Сервисы

В данной статье мы рассмотрим проблему, связанную с интеграцией компонента управления памятью FastMM4 в среду разработки Delphi 7. В частности, рассмотрим задачу запуска приложения и отображения логов, создаваемых FastMM4, при этом приложение может быть установлено в любом месте системы.

Проблема

Разработчик столкнулся с необходимостью запуска утилиты leakTracker.exe для отображения логов, генерируемых FastMM4. Приложение должно было запускаться автоматически при обнаружении утечек памяти. Однако, была проблема с получением пути к утилите leakTracker.exe, так как прямой доступ к стандартным функциям системных модулей SysUtils.pas, Registry.pas и использование ParamStr(0) было невозможно.

Решение

Для решения проблемы можно использовать функции реестра Windows, как было предложено в комментариях на Stack Overflow. Ниже приведен пример кода, который демонстрирует, как можно получить путь к утилите leakTracker.exe через реестр и запустить её с помощью CreateProcess.

uses
  Windows;

var
  hReg: HKEY;
  Ret: LongInt;
  RegDataType, RegDataSize: DWORD;
  CmdLine: array [0..560] of Char; // размер буфера можно увеличить по необходимости
  Len: Integer;
  SInfo: TStartupInfo;
  PInfo: TProcessInformation;

initialization
{$ifndef BCB}
  // код FastMM
{$endif}

finalization
{$ifndef PatchBCBTerminate}
  FinalizeMemoryManager;  // код FastMM

  Ret := RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                      'SOFTWARE\[YourProgram]',
                      0, KEY_READ, hReg);
  // Замените [YourProgram] на путь к ключу реестра, содержащему путь к вашей программе

  RegDataType := REG_SZ;
  RegDataSize := SizeOf(CmdLine);
  Ret := RegQueryValueEx(hReg,
                      'path',       // значение реестра, содержащее путь к вашей программе
                      nil, @RegDataType, @CmdLine[0], @RegDataSize);
  RegCloseKey(hReg);

  // Обработка строки CmdLine для корректного добавления пути к логу
  SetLength(CmdLine, RegDataSize);
  CmdLine[RegDataSize - 1] := #0;
  CmdLine[RegDataSize] := '"'; // открываем двойные кавычки в случае наличия пробелов в пути
  Len := GetModuleFileName(0,
              PChar(@CmdLine[RegDataSize + 1]), Length(CmdLine) - RegDataSize - 1) + RegDataSize;
  // Получаем текущий путь к исполняемому файлу
  while CmdLine[Len] <> '.' do // предполагаем, что у исполняемого файла есть расширение
    Dec(Len);
  CmdLine[Len] := #0;
  // Добавляем имя лог-файла
  lstrcat(CmdLine, '_MemoryManager_EventLog.txt"'); // закрываем двойные кавычки

  ZeroMemory(@SInfo, SizeOf(SInfo));
  SInfo.cb := SizeOf(SInfo);
  CreateProcess(nil, CmdLine, nil, nil, False,
                NORMAL_PRIORITY_CLASS, nil, nil, sInfo, PInfo);
{$endif}
end.

Заключение

Проблема получения пути к приложению для отображения логов FastMM4 в Delphi 7 успешно решена с использованием функций реестра Windows. Это решение позволяет запускать утилиту leakTracker.exe с указанием пути к логу, даже если приложение установлено в произвольном месте системы.

Создано по материалам из источника по ссылке.

В статье рассматривается процесс интеграции компонента управления памятью FastMM4 в среду разработки Delphi 7, с фокусом на запуск утилиты для отображения логов и получение пути к ней через реестр Windows.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Процессы и Сервисы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 17:52:10/0.0033049583435059/0