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

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

01.02.2012, 19:48. Показов 2377. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru