Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 5

Многомодульное приложение win32

23.11.2013, 23:34. Показов 2508. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Я выполняю задание по созданию многомодульного приложения win32. Функционал приложения - работа с файлами, но это значения не имеет. Основной модуль на C++ вызывает внешние функции, которые описаны во втором модуле на ассемблере в виде процедур. Внутри этих процедур вызываются WinAPI функции. В этом и есть суть задания - вызывать функции, описанные в другом модуле. Проблема в том, что не получается собрать приложение.

Пробовал компилировать так:
Компиляция файла *.asm:
tasm32 -la -zi prog1.asm
Компиляция файла *.cpp:
bcc32 -c -v -Lap -Id:\borlandc\include prog2.cpp
Линковка:
ilink32 -Tpe -ap -v prog1.obj prog2.obj

Исходные коды:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
 
extern "C" cdecl int create_file(char*);
extern "C" cdecl int write_file(int,char*,int);
extern "C" cdecl int read_file(int,char*,int);
extern "C" cdecl int close_file(int);
extern "C" cdecl int open_file(char*,int);
extern "C" cdecl int delete_file(char*);
extern "C" cdecl int rename_file(char*,char*);
 
int main(void)
{
    char *name;
    char *newname;
    char *str;
    char buf[100];
    int f, choice, mode, count;
    newname[strlen(newname)]=0;
    name[strlen(name)]=0;
    printf("This program demonstrates work with files in DOS\n");
    while(1)
    {
               printf("Menu:\n1 - Create new file\n2 - Write in file\n3 - Read from file\n4 - Rename file\n5 - Delete file\n\n0 - Exit\n");
               printf("Your choice: ");
               scanf("%i", &choice);
               if(choice==0)
               {
                            break;
               }
               printf("Enter a name of file: ");
               scanf("%s", name);
               switch(choice)
               {
                             case 1: f=create_file(name);
                                     close_file(f);
                                     break;
                             case 2: printf("Enter a data to writing: ");
                                     scanf("%s",str);
                                     f=open_file(name,1);
                                     write_file(f,str,strlen(str));
                                     close_file(f);
                                     break;
                             case 3: printf("Enter a count of reading bytes: ");
                                     scanf("%d", &count);
                                     f=open_file(name,0);
                                     read_file(f,buf,count);
                                     close_file(f);
                                     printf("Reading data: %s", buf);
                                     getch();
                                     break;
                             case 4: printf("Enter new name of file: ");
                                     scanf("%s", newname);
                                     rename_file(name,newname);
                                     break;
                             case 5: delete_file(name);
                                     break;
               }
               system("cls");
    }
    return 0;
}
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
.486
.model flat
 
includelib import32.lib
 
extrn CreateFileA:near
extrn WriteFile:near
extrn ReadFile:near
extrn CloseHandle:near
extrn OpenFile:near
extrn DeleteFileA:near
extrn MoveFileA:near
 
public _create_file
public _write_file
public _read_file
public _close_file
public _open_file
public _delete_file
public _rename_file
 
.data
bw dw ?
br dw ?
FileOf dw 10
 
.code
_create_file proc near
         push ebp
         mov ebp,esp
         push 0
         push 80h
         push 2
         push 0
         push 0
         push 0
         push [ebp+8]
         call CreateFileA
         
         pop bp
         ret
_create_file endp
 
_write_file proc near
            push ebp
            mov ebp,esp
            push 0
            push offset bw
            push [ebp+16]
            push [ebp+12]
            push [ebp+8]
            call WriteFile
            
            pop ebp
            ret
_write_file endp
 
_read_file proc near
            push ebp
            mov ebp,esp
            push 0
            push offset br
            push [ebp+16]
            push [ebp+12]
            push [ebp+8]
            call ReadFile
            
            pop ebp
            ret
_read_file endp
 
_close_file proc near
            push ebp
            mov ebp,esp
            push [ebp+8]
            call CloseHandle
            
            pop ebp
            ret
_close_file endp
 
_open_file proc near
            push ebp
            mov ebp,esp
            push [ebp+12]
            push FileOf
            push [ebp+8]
            call OpenFile
            
            pop ebp
            ret
_open_file endp
 
_delete_file proc near
            push ebp
            mov ebp,esp
            push [ebp+8]
            call DeleteFileA
            
            pop ebp
            ret
_delete_file endp
 
_rename_file proc near
            push ebp
            mov ebp,esp
            push [ebp+12]
            push [ebp+8]
            call MoveFileA
            
            pop ebp
            ret
_rename_file endp
 
end
Просьба помочь с тем, как правильно скомпилировать приложение.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.11.2013, 23:34
Ответы с готовыми решениями:

Консольное приложение для win32, не проходит линковка
К большому сожалению только на этом форуме я получаю хорошие ответы и так же не как не разберусь с этими подключаемыми файлами и кодами...

Java многомодульное приложение с разделением на слои
проект написан и работает, но вопрос по структуре. следуещее задание вопрос по 13 пункту. &quot;Посмотрите пожалуйста пункт 13...

Sbt, многомодульное приложение на - не могу правильно настроить порядок сборки
Здравствуйте! Не думал, что sbt настолько непонятный интсрумент сборки. У меня есть главный проект - root, в котором два подпроекта:...

2
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
24.11.2013, 04:21
filyakov,
WinAPI функции описанные в import32.lib нужно объявлять как extern WriteFile:proc, а не как у тебя extrn WriteFile:near
0
0 / 0 / 0
Регистрация: 23.11.2013
Сообщений: 5
24.11.2013, 14:29  [ТС]
Mikl___, спасибо за поправку, но программа все равно компилируется неправильно. *.exe файл, который у меня получается с использованием описанных выше команд компиляции, не запускается и выдает ошибку "не является приложением win32". Моя проблема в том, что я не знаю, как правильно скомпилировать, и именно с этим прошу помочь.

Добавлено через 1 час 24 минуты
Можно даже переформулировать проблему так: чем отличается компиляция многомодульного приложения для win32 от компиляции подобного приложения для DOS? Т.к. вариант программы для DOS успешно скомпилировался и работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.11.2013, 14:29
Помогаю со студенческими работами здесь

Приложение написано на x64, не могу открыть это же приложение на Win32
Всем доброго дня или вечера. Помогите пожалуйста, я написал приложение си шарпе платформа виндоус 64 разрядный теперь не могу открыть вот...

%1 и Win32 приложение
Всем привет, помогите разрулить ситуацию. Имею винду 7 СП1 ултимате 64 бита, точно такая же стоит на виртуалке. На виртуалке среда -...

Многооконное приложение win32
Поделитесь пожалуйста исходником на многооконное приложение win32, (например программа-тест на знания)

CSharpCodeProvider. Приложение не win32
Есть текстовое поле, куда пишется скрипт (код). Есть кнопка &quot;Build&quot; которая выполняет компиляцию при помощи CSharpCodeProvider. Компиляция...

Приложение win32 и MySQL
Я только начал изучать VC++(у меня 6 версия) и сразу же понадобилось работать с БД. Нашел нга одном форуме код: #define __LCC__ ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru