Delphi - не искажает имена в BPL

Это уже было решено в ответе Рана на аналогичный вопрос SO. Цитата Ран:

Начиная с версии 2.5.7, NUnit позволяет Teardown обнаруживать, не прошел ли последний тест. Новый класс TestContext позволяет тестам получать доступ к информации о себе, включая TestStauts.

Для получения более подробной информации, пожалуйста, обратитесь к http://nunit.org/?p=releaseNotes&r=2.5.7

[TearDown]
public void TearDown()
{
    if (TestContext.CurrentContext.Result.Status == TestStatus.Failed)
    {
        PerformCleanUpFromTest();
    }
}

9
задан Jeroen Wiert Pluimers 20 October 2009 в 17:54
поделиться

4 ответа

В Delphi нет функции, которая бы распутывала имена функций, и я не знаю, чтобы это было где-нибудь задокументировано. Delphi in a Nutshell упоминает, что утилита tdump имеет переключатель -um , позволяющий распутывать найденные символы. Я никогда не пробовал.

tdump -um -e dbrtl100.bpl

Если это не сработает, значит, это не очень сложная схема, чтобы распутать себя. Очевидно, что имя начинается с «@», за ним следует имя модуля и имя функции, разделенные другим знаком «@». За именем функции следует «$ qqrx», а затем - типы параметров.

Типы параметров кодируются с использованием количества символов в имени типа, за которым следует тот же формат с разделителями «@», что и раньше.

$ " необходимо отметить конец имени функции и начало типов параметров. Оставшаяся загадка - это часть "qqrx". Об этом свидетельствует статья , которую нашел Тондрей . «Qqr» указывает соглашение о вызовах, которым в данном случае является регистр , он же fastcall . «X» относится к параметру и означает, что он постоянный.

Тип возвращаемого значения не нужно кодировать в искаженном имени функции, потому что перегрузка все равно не учитывает возвращаемые типы.

который в данном случае является регистром , он же fastcall . «X» относится к параметру и означает, что он постоянный.

Тип возвращаемого значения не нужно кодировать в искаженном имени функции, потому что перегрузка в любом случае не учитывает возвращаемые типы.

который в данном случае является регистром , он же fastcall . «X» относится к параметру и означает, что он постоянный.

Тип возвращаемого значения не нужно кодировать в искаженном имени функции, потому что перегрузка в любом случае не учитывает возвращаемые типы.

9
ответ дан 4 December 2019 в 09:13
поделиться

См. Также эту статью (на немецком языке). Я предполагаю, что изменение, вероятно, обратно совместимо, и новые схемы изменения представлены в более поздних версиях Delphi для новых языковых функций.

7
ответ дан 4 December 2019 в 09:13
поделиться

Из исходных файлов Delphi 2007:

function GetTableNameFromSQLEx(const SQL: WideString; IdOption: IDENTIFIEROption): WideString;

Похоже, это та же версия, поскольку у меня такой же .BPL есть в моем Windows \ System32 папка.

Исходный код можно найти в [Папки с программными файлами] \ CodeGear \ RAD Studio \ 5.0 \ source \ Win32 \ db

Borland / Codegear / Embarcadero уже некоторое время использует эту кодировку и никогда не давал подробных сведений о формат .BPL. Я' я никогда не интересовался ими, так как ненавижу использовать библиотеки времени выполнения в своих проектах. Я предпочитаю компилировать их в свои проекты, хотя в результате получаются гораздо большие исполняемые файлы.

0
ответ дан 4 December 2019 в 09:13
поделиться

Если у вас есть C ++ Builder, проверьте $ (BDS) \ source \ cpprtl \ Source \ misc \ unmangle.c - он содержит исходный код для механизма распутывания, используемого TDUMP, отладчиком и компоновщиком. (C ++ Builder и Delphi используют одну и ту же схему преобразования.)

7
ответ дан 4 December 2019 в 09:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: