|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Янв 11, 2004 15:52:52 Правка Спасибо, volodya, всё теперь работает (правда, не знаю, отчего :)) Four-F либо ты вообще забыл её в каталог кинуть! msdia, что шла вместе с VS 7.0, я зарегистрировал. Могу прислать работающую свя У меня уже работает: pdbdump.exe взят с сайта, теперь всё нормально. Правда, в каталоге с ним лежит библиотека, тоже с сайта. Не знаю, что имеет приоритет: регистрация библиотеки как COM-сервера или простая её загрузка (LoadLibrary). В примере, что идёт с MS DIA SDK, приоритет у СОМ… |
|
|
Дата: Янв 11, 2004 15:57:36 Правка Кстати, снова о конвертере: пока доделываю свой, вот, набросал небольшой скриптик для причёсывания стандартных заголовочных файлов, что в MASM32. Смысл скрипта: добавить директивы условной компиляции, чтобы не париться с Unicode: объявил макроконстанту — у тебя CreateWindowExW, нет — обычная версия. Хотя остаются проблемы с сообщениями (спасибо, Toxic, что обратил внимание!), но подробнее в архиве… _665729266__uniimp.zip |
|
|
Дата: Июн 18, 2004 03:10:24 А я такой умный, думаю сейчас по-быстрому налобаю скриптик, который вытащит все структуры в другой файл попутно немного поправляя их под формат fasm, и обломался сразу же на второй структуре, хрен поймешь что за формат у этой MS :-( #!/usr/bin/perl -w
$symbol="_";
foreach $f (<*.h>)
{
open(IN, "$f") or die "Can't open file: $!";
chop($f);
chop($f);
open(OUT, "+>$f$symbol.inc") or die "Can't open file out.inc for writing: $!";
$i=0;
while(<IN>)
{
if ($i==0)
{
if (/^typedef\s+(struc)t(\s+[a-zA-Z0-9_]+\s*{.*)/i)
{
print OUT "$1$2\n";
$i++;
}
}
elsif ($i>0)
{
if (/(.*{.*)/)
{
print OUT "$1\n";
$i++;
}
elsif (/(.*}.*)/)
{
print OUT "$1\n";
$i--;
}
else
{
print OUT $_;
}
}
}
close(OUT);
close(IN);
} |
|
|
Дата: Июн 18, 2004 03:19:23 Хотя сейчас смотрю и кажется мне что добавив ещё пару строк проблему удастся решить.. |
|
|
Дата: Июн 18, 2004 06:30:26 · Поправил: Asterix Вобщем траблы эти из-за долбаных union'ов, из-за них количество '{' не соответствует количеству '}' Как бы это помягче пофиксить пока не нашёл :-( |
|
|
Дата: Июн 18, 2004 06:35:51 Asterix Хочешь сказать есть непарные фигурные скобки? |
|
|
Дата: Июн 18, 2004 06:54:23 Да, например вот в WINNT.h typedef struct _LARGE_INTEGER {
#else // MIDL_PASS
typedef union _LARGE_INTEGER {
struct {
DWORD LowPart;
LONG HighPart;
};
struct {
DWORD LowPart;
LONG HighPart;
} u;
#endif //MIDL_PASS
LONGLONG QuadPart;
} LARGE_INTEGER; |
|
|
Дата: Июн 18, 2004 07:14:58 Asterix из-за долбаных union'ов ... например вот в WINNT.h Это проблема не union'ов, а условной компиляции. |
|
|
Дата: Июн 18, 2004 07:51:32 Тогда дергать структуры в другой файл идея утопическая, т.к. сложно будет обработать логику условной компиляции. Придётся модифицировать на месте всё что поддаётся, остальное - руками. |
|
|
Дата: Июн 18, 2004 20:22:42 typedef убери, не нужен он. Вовсе не все структуры потом обзываются по нему. if (/(.*{.*)/)
{
print OUT "$1\n";
$i++;
}
elsif (/(.*}.*)/)
{
print OUT "$1\n";
$i--;
}
Вот это меня тоже в восторг не приводит :( |
|
|
Дата: Июн 18, 2004 23:09:02 > Вот это меня тоже в восторг не приводит :( Меня тоже ;-) Поэтому решил сделать в таком стиле, по крайней мере ничего нужного не испортим ;-): #!/usr/bin/perl -w
foreach $f (<*.h>)
{
open(IN, "$f") or die "Can't open file: $!";
chop($f);
chop($f);
open(OUT, "+>$f\_.inc") or die "Can't open file out.inc for writing: $!";
while(<IN>)
{
s/\bBYTE\s+([a-zA-Z0-9_]+)\s*;(.*)/.$1 db ?$2/ig;
s/\bWORD\s+([a-zA-Z0-9_]+)\s*;(.*)/.$1 dw ?$2/ig;
s/\bDWORD\s+([a-zA-Z0-9_]+)\s*;(.*)/.$1 dd ?$2/ig;
s/\bLONG\s+([a-zA-Z0-9_]+)\s*;(.*)/.$1 dd ?$2/ig;
s/\bBYTE\s+([a-zA-Z0-9_]+)\[([0-9]+)\]\s*;(.*)/.$1 rb $2$3/ig;
s/\bWORD\s+([a-zA-Z0-9_]+)\[([0-9]+)\]\s*;(.*)/.$1 rw $2$3/ig;
s/\bDWORD\s+([a-zA-Z0-9_]+)\[([0-9]+)\]\s*;(.*)/.$1 rd $2$3/ig;
s/\btypedef\s+(struc)t(\s+)_([a-zA-Z0-9_]+)(.*)/$1$2$3$4/ig;
s/^#define\s+([a-zA-Z0-9_]+)(\s+)([0-9]+\b)(.*)/$1$2= $3$4/ig;
s/^#define\s+([a-zA-Z0-9_]+)(\s+)0x([a-fA-F0-9]+\b)(.*)/$1$2= $3h$4/ig;
s/\/\//;/g;
print OUT $_;
}
close(OUT);
close(IN);
} |
|
|
Дата: Июн 18, 2004 23:12:44 Я впечатлен :) Сие не поймет даже сам создатель, если взглянет на этот код по протяжении некоторого промежутка времени. |
|
|
Дата: Июн 19, 2004 00:05:15 Да ладно, всё понятно и прозрачно, а главное работает ;-) Конвертирует простые структуры и константы в формат fasm'а, ну конечно ещё можно добавить кучу строк, но мне этого пока хватает. |
|
|
Дата: Июн 19, 2004 14:18:03 Правка volodya Я впечатлен :) Я вообще в отпаде :). Asterix Проблема условной компиляции решается подсчётом #ifdef/#if defined и т.п. Причём для фасма в этом случае легче парсить. Но сложнее в другом - ему в структурах подавай основные типы данных, LPTCSTR ? не прокатит, кажется. Да, кстати, S_T_A_S_ говорил, что фасм научили "понимать" сишные заголовочные файлы. Причём сие - как "побочное действие" :). Я, правда, так и не нашёл. |
|
|
Дата: Июн 19, 2004 14:59:28 IceStudent > Проблема условной компиляции решается подсчётом #ifdef/#if defined и т.п. Не, я этого делать не буду ;-) |