link.exe (5.12.8078)не хочет работать пишет такие строчки: 2.obj : error LNK2001: unresolved external symbol _PacketGetAdapterNames@8 2.exe : fatal error LNK1120: 1 unresolved externals При этом ml.exe не ругается. PacketGetAdapterNames в программе встречается в 1 месте call PacketGetAdapterNames Подскажите в чем проблема
Судя по всему, у тебя функция PacketGetAdapterNames не из пакета masm32, следовательно она не описана в inc файла. Объяви прототип самостоятельно: PacketGetAdapterNames PROTO WORD, WORD или EXTERN PacketGetAdapterNames@8:NEAR
Прототип типа: или и т.п. всего лишь говорит компилятору (ml.exe) что такая-то функция (вернее, такой-то символ) где-то существует, но не говорит где именно. Компилятору достаточно знать, что символ есть, а ресолвить этот символ будет линкер. Поэтому ml.exe и не ругается, а ругается link.exe. Где же находится функция с именем PacketGetAdapterNames? В winpcap? Значит, линкеру надо указать на либу winpcap. includelib winpcap.lib или как она называется у Вас...
и получишь еще пару ошибок из за несовместимости либ файла от разработчиков winpcap и link.exe от Microsoft Сделай длл с генерацией либ файла сам на асме по прототипам . Шаблонам так сказать. Например : .code DllEntry proc hInstance:HINSTANCE, reasonWORD, reserved1WORD mov eax,TRUE ret DllEntry Endp ; See skeleton.def: This is an exported function PacketGetAdapterNames PROC STDCALL AWORD, BWORD ret PacketGetAdapterNames endp .... И все будет линковаться. Я кстати где-то про это писал. Пример в аттаче. 992637280__packet.rar
TermoSINteZ Спасибо слинковалась. Но не работает . После вызова PacketGetAdapterNames буфер пустой хотя ошибки нет. Передирал один в один из твоей статьи lea eax,AdapterLen push eax lea edi,AdapterName push edi call PacketGetAdapterNames Пожалуйста подскажи в чем проблема. Прога в аттаче. _1525201492__net.asm
А у тебя адаптеры включены (именно сетевухи а не модем)? хотяб 1 подключена (то есть сетевое соединение должно быть) ? А еще формат данных, записываемых в буфер, отличен для версий Windows 95/98 и WindowsNT/2000, из-за разницы в кодировках у этих ОС (Windows 95/98 использует кодировку ASCII, Windows NT/2000 – UNICODE). Вот собственно и все.
Адаптеры включены просто у меня мозгов не хватает. Если я трассирую функцию в отладчике вижу push ebp mov ebp,psp leave ret вобщем один в один как в твоем примере (я просто make запустил. Как заставить link понимать lib именно winpcap`овский недогоняю. Пробовал pocket.dll перегнать в lib прогой dll2lib тоже самое link непонимает. Объясни пожалуста, обещаю вместо пива пить витаминки для мозга.
ну попробуй для сборки LINK.EXE из визуал студии. Там просто длл такая, что все вызовы cdecl походу, а масму нужен stdcall. Это только предположения .. я этим не заморачивался . Если надо на асме, либу руками делал.
to TermoSINteZ Можеш скинуть либу желательно с исходниками для функций из твоей статьи? Очень разобраться хочется.
Ура заработало. Добавилл оригинальную dll-ку, а либу использовал твою. Спасибо за помощь. Витаминки для мозга отменяются.