Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
2 / 2 / 0
Регистрация: 11.01.2012
Сообщений: 9

LPT порт, обмен. Перевести с Delphi на C++Builder.

01.02.2012, 19:48. Показов 2351. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Так получилось, что приходится осваивать программирование. Написал программу, которая работает с LPT портом, с помощью Delphi. Теперь нужно перевести ее в C++Builder. Начал переводить. Компилируется... Но работает криво. Проблемы при чтении данных с порта. Помогите, пожалуйста, поправить. Или реализовать обмен каким-нибудь другим способом
Вложения
Тип файла: rar Проект С++.rar (377.3 Кб, 72 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.02.2012, 19:48
Ответы с готовыми решениями:

Перевести код из Delphi в C++ Builder
program Project1; uses Windows, ShellApi; function GetTmpPath():string; var sBuff: array of char; begin ...

Перевести код с Delphi в C++ Builder
var fmBattle: TfmBattle; A,B,C:mas; D:rmas; Sh,Ch,ds:arrayof integer; p,strg:integer; flag,nol:boolean; ...

Перевести код из Delphi 7 в Builder 6
Есть программа написаная в делфи. Можете помочь переписать ее в си++ билдер 6? Я попробывал и понял что моё знание и того и другого еще...

14
2 / 2 / 0
Регистрация: 11.01.2012
Сообщений: 9
01.02.2012, 21:47  [ТС]
Нашел я в чем косяк тут. Может, кому-нибудь в будущем пригодится. Делфа эту операцию проводит на автомате, а в билдере пришлось писать вручную.
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
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Data2 = (short) Inp(888); // Выбор данных из порта
Label2->Caption = "Данные: " + IntToStr(Data2);
d0 = Data2 % 2;
if (d0)
  Panel8->Color = clRed;
  else Panel8->Color = clLime;
d1 = Data2 % 4;
if (d1 <= 1)
  Panel7->Color = clLime;
  else Panel7->Color = clRed;
d2 = Data2 % 8;
if (d2 <= 3)
  Panel6->Color = clLime;
  else Panel6->Color = clRed;
d3 = Data2 % 16;
if (d3 <= 7)
  Panel5->Color = clLime;
  else Panel5->Color = clRed;
d4 = Data2 % 32;
if (d4 <= 15)
  Panel4->Color = clLime;
  else Panel4->Color = clRed;
d5 = Data2 % 64;
if (d5 <= 31)
  Panel3->Color = clLime;
  else Panel3->Color = clRed;
d6 = Data2 % 128;
if (d6 <= 63)
  Panel2->Color = clLime;
  else Panel2->Color = clRed;
d7 = Data2 % 256;
if (d7 <= 127)
  Panel1->Color = clLime;
  else Panel1->Color = clRed;
}
1
 Аватар для __bool
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
01.02.2012, 22:05
Раз уж так получилось, что просто поделились проектом.. Опишите пожалуйста назначение данной программы.
0
2 / 2 / 0
Регистрация: 11.01.2012
Сообщений: 9
05.02.2012, 17:45  [ТС]
Тут все просто.В два верхних регистра записываются данные и выводятся на порт в виде нулей и единиц логических. С нижних регистров происходит чтение при двунаправленном режиме обмена. Если разобраться в этих основах, можно довольно просто реализовать работу с реальным железом, загоняя туда информацию, читая отклик. В своей ситуации я общаюсь через порт с ПЛИС.
0
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
06.02.2012, 00:16
После 2-го, если не ошибаюсь, сервиспака для XP прямой доступ к портам и командам asm: in/out был закрыт наглухо.

А как вы к LPT обращаетесь из C++ ?
Драйвер какой пользуете ?
0
2 / 2 / 0
Регистрация: 11.01.2012
Сообщений: 9
15.02.2012, 20:21  [ТС]
Через DLL. Что там внутри я не знаю, взял готовую библиотеку. Подгружаю ее и через функции общаюсь с портом
0
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
16.02.2012, 10:06
Она бесплатная ?
Как называется ?
0
2 / 2 / 0
Регистрация: 11.01.2012
Сообщений: 9
19.02.2012, 15:12  [ТС]
Я скачал ее бесплатно с сети. Называется InpOut32. Если не найдете, могу выложить ее сдесь
0
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
19.02.2012, 16:45
Спасибо, она работает с Windows XP SP3 ?

Я пользовал DLPORTIO. Он перестал работать после установки SP2
0
2 / 2 / 0
Регистрация: 11.01.2012
Сообщений: 9
19.02.2012, 19:12  [ТС]
Под вторым паком на работе работает у меня. Дома семерка стоит, решил попробовать из интереса. Тоже работает все. Поэтому, думаю, все хорошо будет и под 3м паком.
1
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
20.02.2012, 13:52
А как вы её подключаете к проекту на C++Builder ? Есть готовый компонент ?

Не работает у меня Проект С++.rar при обращении к порту в строке
C++
1
Data2 = * Inp(0x378); //Выбор данных из порта
С++ Builder 6 пишет "Access Violation" и прерывает программу.
0
2 / 2 / 0
Регистрация: 11.01.2012
Сообщений: 9
21.02.2012, 08:49  [ТС]
Попробуйте так:
C++
1
Data2 = (short) Inp(888);
0
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
21.02.2012, 12:19
Так типа заработало в примере Проект С++.rar

Переделал прогу свою и прикол в том, что всё реально пишет в порт, но через несколько записей в порт опять С++ Builder 6 пишет "Access Violation" и прерывает программу. Не понятно почему первые команды проходят
пример :
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
outport(ACTIVE_PORT,0);     // set all signals to 0
pause(CLK_pause);
outport(ACTIVE_PORT,1); // first set CS signal to 1
pause(CLK_pause);
// setup command write 1 0 1
outport(ACTIVE_PORT,5);
pause(CLK_pause);
outport(ACTIVE_PORT,7); // 1
pause(CLK_pause);
outport(ACTIVE_PORT,1);
pause(CLK_pause);
outport(ACTIVE_PORT,3); // 0
pause(CLK_pause);
outport(ACTIVE_PORT,5);
pause(CLK_pause);
outport(ACTIVE_PORT,7); // 1
pause(CLK_pause);
очередное обращение

C
1
outport(ACTIVE_PORT,3); // 0
Вызывает "Access Violation"

Добавлено через 7 минут
Даже не знаю что сказать... Причины такого поведения не могу понять... Ладно бы не писал в порт и на первом же обращении к порту писал ошибку, а тут ведь пишет и затыкается позже.

ReadPort.h
C
1
2
3
4
5
typedef Byte (__import * FType1 (unsigned short PortAdr, Byte Data));
FType1 * outport;
//Объявление переменной Inp
typedef Byte (__import * FType2 (unsigned short PortAdr));
FType2 * inport;
ReadPort.c
C
1
2
3
4
5
6
7
dllInstance = LoadLibrary ("InpOut32.dll");
 
//Загрузка функции Out32 и присоединение к ней переменной Out
outport = (FType1 *) GetProcAddress (dllInstance, "Out32");
 
//Загрузка функции Inp32 и присоединение к ней переменной Inp
inport = (FType2 *) GetProcAddress (dllInstance, "Inp32");
0
2 / 2 / 0
Регистрация: 11.01.2012
Сообщений: 9
24.02.2012, 13:23  [ТС]
Я сейчас с такой же проблемой столкнулся. Если писать в порт с использованием таймера, то ошибки не будет. Но это очень медленно. Примерно 15 мс. Быстрее не получается. Зато ошибки нет. Пытаясь увеличить быстродействие, по даташиту несколько МГц, выдает ошибку. Знакомые говорят, что это переполнение памяти. Что нужно придумать какую-нибудь альтернативу стандартному таймеру, чтобы все работало. Вот на этом и встал.
0
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
24.02.2012, 13:26
У меня проблема возникает при пошаговой отладке в Debuger

Я так понимаю что прога реально пишет в какую-то область памяти, а драйвер уже подхватывает это и пишет в порт. Может проблема с этим. или я не правильно понял как всё это работает ...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.02.2012, 13:26
Помогаю со студенческими работами здесь

Перевести исходник c Delphi 7 на С++ Builder 6
Помогите перевести исходник, пожалуйста.

Перевести код из Delphi в C++ Builder
procedure TF2.RezultClick(Sender: TObject); var i,j:integer; begin randomize; for i := 1 to 4 do for j := 1 to 6 do ...

Перевести проект из Delphi в Builder
люди помогите! нужно до 25.01.15 перевести код из Delphi в Bilder! вот код: Лістинг головного файлу проекту program PrArtem; uses ...

Перевести код сортировки с Delphi 7 на C++ Builder
Помогите перевести сортировку из кода Delfpi 7 в код С++ Builder: if Length(EditSearch.Text)&gt;0 then begin Query1.FilterOptions:=; ...

Функция C++ Builder - перевести код с Delphi
Доброго времени суток. Помогите перевести код с Delphi на C++ Buider, заранее спасибо !function TForm1.Pars(T_, ForS, _T: string): string; ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru