Столкнулся с проблемой в forward dll. Макросы import и/или export похоже имеют квадратичную сложность от размера строки. Пустая прога со всем импортом и экспортом кернела компилится две минуты на моем C3-1200. Что делать?
S_T_A_S_ А если без половых извращений? В макросе export какая-то сортировка используется, и похоже пузырек. Его на qsort нельзя перевести?
Можно, наверное, но зачем? Сформируй раздел экспорта ручками через db. А чтобы не пыхтеть печатая каждую строчку, и нужен скрипт на пёрле. Подаёшь ему на вход fasm\INCLUDE\APIA\KERNEL32.INC и усё Кста, какая версия fasm? В последних препроцессор быстее.
попробуй сделать 2 длл - одна форвард, другая с контролируемой вункцией. форвард должна все запросы слать транзитом, а для контролируемой(ых) вызывать вторую, которую ты и будешь отлаживать, форвард скомпилишь только 1 раз, а вторая будет маленькой. может, типа, вариант...
Возможное решение: сделать "export" макрос чтобы не сортировал совсем, а сортировать експорты в сорсе вручную. Сделать qsort кажеться трудно потому что рекурсивно макросы вызывать в FASMe невозможно. Но можно попробовать некоторые итерационные варианты...наверное...
Вот и сюрприз. Посмотрел сегодня в пакет Fresh, а там до сих пор старой вариант "export" живет, где сортировка вручную делается. Кажеться должен работать. Код (Text): ; macroinstruction for making export section macro export dllname,[label,string] { common local module,addresses,names,ordinal,count count = 0 forward count = count+1 common dd 0,0,0,RVA module,1 dd count,count,RVA addresses,RVA names,RVA ordinal addresses: forward dd RVA label common names: forward local name dd RVA name common ordinal: count = 0 forward dw count count = count+1 common module db dllname,0 forward name db string,0 } Кстати, знает ли кто нибудь, совсем ли ето обязательно, чтобы имена были сортированные?
наверное, нет я сейчас попробовал этот макрос вместо того что был (правда, я не вникал вот мой экспорт: Код (Text): export 'INP2.DLL',\ GetWAAddInData,'GetWAAddInData',\ WAAddInLoad,'WAAddInLoad',\ WAAddInUnload,'WAAddInUnload',\ FrameWindowProc,'FrameWindowProc';,\ работает нормально... может, так и оставлю
johnfound кстати, мысль: я оставил оба макроса в export.inc, только второй переименовал в export_unsorted: мало ли, может, тоже пригодится в подобной ситуации.