Здравствуйте!
Помогите пожалуйсто разобраться это я тупой или компиляторы попадаются глючные….
Требуется подключить драйверBGI.
Есть код:
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
int huge detectSVGA64K(void);
int main(void)
{
int gdriver, gmode, errorcode;
gdriver=installuserdriver("SVGA64K", detectSVGA64K);
initgraph(&gdriver,&gmode,"");
errorcode = graphresult();
if(errorcode != grOk)
{
printf("error :%s\n",grapherrormsg(errorcode));
printf("any key\n");
getch();
exit(1);
}
line(100,100,600,400);
getch();
return 0;
}
сомтрел его по всему интернету. Но при компиляции всегда возникает ошибка:
Undefined symbol '_detectSVGA64K' in module
уже нет ни каких нервов. 3 дня рысканья по интернету ничего так и не дали. Надеюсь на вашу помощь. Заранее спасибо.
23 ноября 2008 в 21:01
напиши свою функцию _setvideomode, которая вызывает то, что имеется в BC31. скорее всего в том компиляторе имелась своя библиотека для работы с графикой.
23 ноября 2008 в 18:04
тогда не понятно.. функция есть, компилятор borland c++ 3.1вродебы поддерживает Си..НО компилятор не распознает функцию _setvideomode, хотя она есть. И она не одна такая их много. Непонятно
23 ноября 2008 в 17:05
ну и что? формат MZ-файлов с тех пор не менялся, и VESA тоже имеет обратную совместимость.
23 ноября 2008 в 17:04
дело не в C/C++, а в том, есть ли функция _servideomode и константы _VRES16COLOR и _DEFAULTMODE, или нет.
23 ноября 2008 в 17:04
Функция есть, и ей посвящено немало книг. например Ла Мот писал в своих книгах про нее очень много. И на сколько я знаю в то время с++ просто еще не было.
23 ноября 2008 в 15:04
Спасибо Леонид. Но с этой программой я уже разобрался.
Дело в том что мне нужно инициализировать графику с помощью функции _setvideomode() которая находится в библиотеке graph (а не graphics). Эта библиотека есть в майкрософт си.. в компиляторе от борланда такой библиотеки нет.искал в яхо и гогле но компилятора от майкрософта не нашел, попадается куча литературы по данному компилятору но не сам он. Может знаете где его взять?
Например код представленный ниже будет работать только на компиляторе Си:
#include <stdio.h>
#include <graph.h>
void main(void)
{
_setvideomode(_VRES16COLOR);
while(!kbhit()){}
_setvideomode(_DEFAULTMODE);
}
Прочитав кучу статей и форумов пришел к выводу что в С++ многие операоры из Си не поддерживаются, а у меня задание требует использование именно Си операторов.
23 ноября 2008 в 1:02
компиляторы C++ обычно осиливают и просто C. может быть не в этом дело? судя по внешнему виду кода он был написан для какого-то досовского борландовского продукта. попробуй borland c++ 3.1
22 ноября 2008 в 9:03
Спасибо. С этим уже разобрался…
Может кто подскажет где можно достать компилятор Си (Например microsoft c) а не Си++…
Это оказалась моя самая первая ошибка… Не тот компилятор..(((
21 ноября 2008 в 22:01
насколько я помню, в borland c++ 3.1 (практически turbo c++) размещения драйверов рядом с ide было не достаточно если пути, прописанные линкеру, туда не смотрели.
21 ноября 2008 в 13:01
2 Константин Дорофеев: в Pascal оно может и работает, но перед использованием файлов BGI в C тебе нужно сконвертировать их в объектные файлы (*.OBJ) с помощью утилиты binobj (идёт по крайней мере вместе с Turbo Pascal), которые потом используются при линковке твоей программы.
P. S. Сам не пробовал этого делать, выводы сделаны по результатам беглого поиска в Google.
21 ноября 2008 в 10:04
Библиотека SVGA64K.BGI лежит в той же папке где и EXE файл, судя по интернет данным так должно работать, но не работает.
21 ноября 2008 в 8:01
укажите линкеру правильный путь к библиотечке с драйверами