Здравствуйте. Собственно есть три файла *.asm: add_sub, add2, sub1. add_sub вызывает процедуры из add2 и sub1. Процедуры (из add2, sub1) объявлены как extern в add_sub, а в файлах add2 и sub1, как public, в общем все соблюдено. Компиляция проходит успешно: E:\masm32\bin\ml /c /coff add_sub.asm add2.asm sub1.asm создается 3 объектных файла. Вопрос: Как компоновать линкером? Пытался так: E:\masm32\bin\Link /SUBSYSTEM:WINDOWS /DLL /DEF:add_sub.def add_sub.obj add2.obj sub1.obj ах да, создаю библиотеку. Спасибо.
Файл add_sub: Код (Text): .686 .model flat, stdcall .stack 100h option casemap: none extern add2:proc extern sub1:proc public a1, a2, b3 include D:\masm32\include\windows.inc .data hInst HINSTANCE NULL a1 dd 12 a2 dd 17 b3 dd 34 .code start: DllEntryPoint proc hInstance:HINSTANCE, dwReason:dword, lpvReserved:LPVOID .If dwReason == DLL_PROCESS_ATTACH mov eax, hInstance mov hInst, eax .ElseIf dwReason == DLL_PROCESS_DETACH .ElseIf dwReason == DLL_THREAD_ATTACH .ElseIf dwReason == DLL_THREAD_DETACH .EndIf mov eax, TRUE ;Return TRUE ret DllEntryPoint endp add_sub proc clc call add2 ; push eax ; call sub1 ret add_sub endp end DllEntryPoint end start Файл sub1: Код (Text): .686 .model flat option casemap: none extern b3:dword public sub1 .code sub1 proc push ebp mov ebp, esp mov eax, dword ptr [ebp+8] sub eax, b3 pop ebp ret 4 sub1 endp end Файл add2: Код (Text): .686 .model flat option casemap: none public add2 extern a1: dword extern a2: dword .code add2 proc mov eax, a1 adc eax, a2 ret add2 endp end файл def: Код (Text): LIBRARY add_sub EXPORTS add_sub Я читаю книгу (ассемблер для процессоров intel Pentium), набираю и компилирую примеры. К исходникам не придраться, доселе компилировались без единой ошибки. Проблема в том, что я никогда не сталкивался с соединением нескольких файлов в один исполняемый, а в данном случае в DLL. В книге не указано как быть в этом случае.