Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2009, 06:51   #1
KuevProger
Пользователь
 
Регистрация: 16.03.2009
Сообщений: 38
По умолчанию Создание DLL в Borland C++ 3.1

Приветствую вас многоуважаемые прогеры!) У меня возникла проблема в написании драйвера для контроллера, проблема заключается в выподании ошибки линкера "linker error: undefined symbol libmain in module c0d.asm"
вот код:
Код:
 #include <dos.h>
#include <stdio.h>

long   *ad;
                      
typedef union
 {
  unsigned char c[6];
  unsigned short int i[3];
  } 
 IA;                         

                      
int RWH(unsigned short type, IA &ia, unsigned short *v)  //Прототип драйвера
{               
switch (type){
		case 0x8000: // Первый вызов драйвера
  				return 0;
		case 0x1000: // Последний вызов драйвера
				return 0;
		case 0x2000: // AI RWH & AO RWH инициализация
			     // Можно оставить код пустым или реализовать какие-либо алгоритмы
			     // например, инициализации платы УСО
				return 0;
		case 0x3000: // DI RWH & DO RWH Инициализация
			     // Можно оставить код пустым или реализовать какие-либо алгоритмы
			     // например, инициализации платы УСО
				return 0;
		case 0x4000: // AO RWH Обработка Аналогов - Выходы
			     // Считали адрес ia - в соответсвии с настройками послали в устройство значение v
				return 0;
		case 0x5000: // AI RWH Обработка Аналогов - Входы
			     // Считали адрес ia - в соответсвии с настройками считали из устройства значение и присвоили его в v
				return 0;
		case 0x6000: // DO RWH Обработка Дискретов - Выходы
			     // Считали адрес ia - в соответсвии с настройками послали в устройство значение v
				return 0;
		case 0x7000: // DI RWH Обработка Дискретов - Входы
			     // Считали адрес ia - в соответсвии с настройками послали в устройство значение v
				return 0;
		case 0xa000: // INPUT VOID_RWH - посылка значений в базу каналов
			     // управляя адресом ia посылаем новые значения в атрибуты каналов
				return 0;
		case 0xb000: // OUPUT VOID_RWH - чтение атрибутов из базы каналов
			     // управляя адресом ia считываем значения атрибутов каналов
          			return 0;
		}
return 0;
}

int main (void)
{
  union REGS inr;   
  ad=(long*)MK_FP(0,0x04f0);   // Set call address
  *ad=(long)RWH;               // Driver procedures
  inr.x.ax=0x3100;             // Exit to DOS
  inr.x.dx=800;                // Normal finishing
  intdos(&inr,&inr);           // of the resident code
  return 0;
}
хелпаните кто может)
KuevProger вне форума Ответить с цитированием
Старый 21.09.2009, 09:34   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Начнем с того что главная функа в ДЛЛ имеет имя DllMain
И потом что мешает посмотреть как BC делает ДЛЛки?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.09.2009, 12:30   #3
KuevProger
Пользователь
 
Регистрация: 16.03.2009
Сообщений: 38
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Начнем с того что главная функа в ДЛЛ имеет имя DllMain
И потом что мешает посмотреть как BC делает ДЛЛки?
Еслиб я хотел услышать канкретный ответ, а не очередные вопросы. В чем именно у меня косяк в коде, выдает ошибку: linker error: undefined symbol libmain in module c0d.asm.
KuevProger вне форума Ответить с цитированием
Старый 21.09.2009, 12:45   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Еслиб я хотел услышать канкретный ответ
Ты протри мылом глазки и внимательнее прочти что я тебе написал:
Цитата:
главная функа в ДЛЛ ДОЛЖНА иметь имя DllMain
Запусти Borland C++ (Лучше возьми поновее версию). Создай пустой проект DLL Dynamic и посмотри как он выглядит.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.09.2009, 13:22   #5
KuevProger
Пользователь
 
Регистрация: 16.03.2009
Сообщений: 38
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Запусти Borland C++ (Лучше возьми поновее версию). Создай пустой проект DLL Dynamic и посмотри как он выглядит.
Мне надо 4тоб под досом драйвер работал, и в этом нет такого как DLL Dynamic и соответственно я не могу посмотреть как он там выглядит.
KuevProger вне форума Ответить с цитированием
Старый 21.09.2009, 13:31   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Мне надо 4тоб под досом драйвер работал
Ах вот оно что. А что же ты в названии темы пишешь?
Какого типа ты проект создал?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.09.2009, 13:42   #7
KuevProger
Пользователь
 
Регистрация: 16.03.2009
Сообщений: 38
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Какого типа ты проект создал?
в этой версии borlanda не как такового типа проэкта, Там тупа File>new и сразу открывается пустая CPP-ка. в настройках Options>Aplicattions>windows Dll(другие варианты Dos standart,Dos owerlay, widows APP все ехешники остальные), Dos Dll нет такого...
KuevProger вне форума Ответить с цитированием
Старый 21.09.2009, 13:46   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Dos Dll нет такого...
И не будет. в ДОСе ДЛЛ заменяли оверлеи.
А драйвер писался простым (ну если париться не охота) Экзешником, где перехватывалось некое прерывание, и вызывалась функция БИОСа (не помню ее номер 37H кажись), оставляющая программу резидентной.
Я так например так в Turbo Pascal писал драйвер для клавы и еще одного приборчика.
Цитата:
в этой версии borlanda не как такового типа проэкта
А-а-а ну да. Это же досовска прога. Делай просто й Экзешник, но резидентный.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.09.2009, 13:51   #9
KuevProger
Пользователь
 
Регистрация: 16.03.2009
Сообщений: 38
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
где перехватывалось некое прерывание, и вызывалась функция БИОСа (не помню ее номер 37H кажись), оставляющая программу резидентной.
Dos overlay компилится,на4инаешь юзать сразу закрывается, но как теперь его юзануть с Доса можно поподробней)
KuevProger вне форума Ответить с цитированием
Старый 21.09.2009, 14:09   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Оверлеи тебе не помогут. Ты когда научишся читать посты внимательно?
Я говорил про Экзешник!
http://www.frolov-lib.ru/books/bsp/v18/ch5.html
http://garet666.narod.ru/book/progr/a1a/ch5.htm
http://e-dok.narod.ru/msdos/book/gl03-21.html
http://devotes.narod.ru/Books/3/ch05_09.htm

Плюс к этому запроси поисковик по примерам на прерывание то которое там описано.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создание компонента из dll Filil Компоненты Delphi 4 14.09.2009 23:04
Проблема с DLL в borland c++ gon21 Общие вопросы C/C++ 3 28.07.2009 22:18
Создание dll runtime mayn Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 20.05.2009 17:06
Создание DLL в Excel tae1980 Microsoft Office Excel 6 02.02.2009 23:14
Создание dll John_chek Общие вопросы Delphi 3 24.09.2007 14:26