Страница 1 из 1

Создание DLL в Borland C++ 3.1

Добавлено: 21 сен 2009, 07:23
KuevProger
Приветствую вас прогеры!) У меня возникла проблема в написании драйвера для контроллера, смысл проблемы в ошибки линкера "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;
}
 
хз 4е делать хелпаните :confused:

Re: Создание DLL в Borland C++ 3.1

Добавлено: 21 сен 2009, 12:22
Romeo
По всей видимости он хочет, чтобы вместо main у тебя была libmain.

Re: Создание DLL в Borland C++ 3.1

Добавлено: 21 сен 2009, 12:53
KuevProger
Romeo писал(а):По всей видимости он хочет, чтобы вместо main у тебя была libmain.
туже самую ошибку выдает...
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
но мне надо 4тоб этот драйвер работал под досом, соответственно его надо делать ехешником и 4тоб он был резидентной программой, кто мне подскажет как это сделать?), да и в добавок ко всему мне надо 4тоб он юзался через Trace Mode 6.04, а он работает только с ДЛЛльками. Как быть кто подскажит?

Re: Создание DLL в Borland C++ 3.1

Добавлено: 09 ноя 2009, 13:33
atavin-ta
тогда dllmain. В динамических библиотеках main зовут немножко иначе. Если всёравно вылезет баг, попробуй помянять регистр в этом имени. И определись, что ты всё-таки хочешь: экзэшник или дллку?