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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2010, 18:52   #1
xyz010
Новичок
Джуниор
 
Регистрация: 01.04.2010
Сообщений: 1
По умолчанию Работа с LPT

Уважаемые форумчане здравствуйте!
Сразу к делу.
Нужно по LPT передать файл по байтно программа кампилится но во время работы выдает ошибку

Project xxxx raised exception class EAcessViolation with message 'AcessViolation at address 000000B1. Read of address 000000B1'.Process stopped. Use Step or Run to continue.

при отладке первый байт в порт передается а второй нет при чем не зависимо от куда брать данные хоть статические, хоть переменные, хоть в цикле, хоть просто два обращение подряд, задержка тоже не помогает.


При обращении напрямую к функциям out32 и Inp32 при линовке выдает ошибку. Unresolved external 'Out32' referenced from F:\PROJECTS\CF4.OBJ


Код:

extern "C"
{
 _stdcall Inp32(short PortAddr);
 _stdcall Out32(short PortAddress, short data);
 }

void __fastcall TForm1::LoadClick(TObject *Sender)
{
        AnsiString Name=Edit1->Text;
        FILE*f_param;
        f_param=fopen(Name.c_str(),"rb");
        if (f_param==0){
              ShowMessage(AnsiString("Файла ")+Name+AnsiString(" нет!!!"));
        }
        else{

             int i=0, aut_data=0;
             int*array_file;
             array_file=(int*)malloc(1572864);
             if(array_file==NULL){
                     MessageBox(NULL,"Error Memo","Error malloc",MB_OK);
                     exit;
             };
             while (!feof(f_param)){
                array_file[i]=fgetc(f_param);
                i++;
             }
             array_file=(int*)realloc(array_file,i+1);
             if(array_file==NULL){
                     MessageBox(NULL,"Error Memo ","Error realloc",MB_OK);
                     exit;
             };
             fclose(f_param);

             HINSTANCE hLib;// указатель на dll
             typedef void (_import * Output(int, int) ); // определяем тип для задания типа указателя :)
             Output *my_out; // Собственно, указатель нужного типа
             typedef short (_import * Input(int) );
             Input *my_in;

             hLib=LoadLibrary ("inpout32.dll");  // Грузим длл-ку
             if(hLib==NULL){
                  ShowMessage(AnsiString("Error Load inpout32.dll не работает "));
             }
             else{
                  my_out=(Output*) GetProcAddress (hLib, "Out32"); // указатель на функцию ввода в порт
                  if (!my_out){
                        MessageBox(NULL,"Error Load my_out","Error",MB_OK);
                        FreeLibrary(hLib);
                  }
                  else{
                        my_in=(Input*) GetProcAddress (hLib, "Inp32");   // указатель на функцию вывода из порт
                        if (my_in==NULL){
                             MessageBox(NULL,"Error Load my_in","Error",MB_OK);
                        }
                        else{
                                //сдесь код предачи данных в цикле
                            for(aut_data+=6;aut_data<i;aut_data++){
                               //Sleep(250);
                               my_out(888, array_file[aut_data]);
                            }
                        }
                  }

            }
            free(array_file);
        }


}
xyz010 вне форума Ответить с цитированием
Старый 01.04.2010, 21:40   #2
Assemblerru
Форумчанин
 
Регистрация: 28.01.2010
Сообщений: 224
По умолчанию

я пробовал чтото подобное но нечего не получилось попробуй функцию описанную ниже: если получится то пиши

http://www.frolov-lib.ru
всему свое время как зиме и весне
и каждому солнцу свой неба кусок
Assemblerru вне форума Ответить с цитированием
Старый 02.04.2010, 01:01   #3
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

А использование этой длл обязательно?
Эта длл только две функции экспортирует?
А порт открывать не надо?

А что должны возвращать функции из длл, или компилятор должен отгадать?
И еще, в декларации стоит short, а при вызове запихивается int. странно.

Последний раз редактировалось f.hump; 02.04.2010 в 02:28.
f.hump вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с LPT-портом Karp_13 Общие вопросы Delphi 35 10.08.2011 00:10
Работа с LPT. Levsha100 Помощь студентам 2 13.09.2008 21:27
Работа с LPT портом chingiz Паскаль, Turbo Pascal, PascalABC.NET 1 17.11.2007 21:21
Работа с LPT NorthNoise Общие вопросы Delphi 2 26.06.2007 04:37