Старый 19.08.2013, 10:01   #1   
Форумец
 
Аватар для ][irurg
 
Сообщений: 2,009
Регистрация: 14.07.2006
Возраст: 42
Записей в дневнике: 1

][irurg вне форума Не в сети
Делфи, TOClient

добрый день
Возникла проблема с Делфи. Нужно переписать код на делфи под С#, мне прислали делфевый проект.
При открытии пишет груду ошибок про класс TOClient (вложение), соовтественно не стартует, не могу отдебажить. Предполагаю что то нужно подключить, но что и где взять?
win 7 64х, делфи 7 ent/
Прошу откликнуться.
Вложения
Тип файла: zip ощибка делфи.zip (505.4 Кб, 5 просмотров)
  Ответить с цитированием
Старый 19.08.2013, 10:34   #2   
Мы вместе
 
Аватар для DWanek
 
Сообщений: 917
Регистрация: 15.04.2005
Возраст: 40

DWanek вне форума Не в сети
К проекту подключены сторонние модули: UOMemTable, UOClient, UOrionAbstracts, UOrionTCPConnection. Учитывая то, что гугл о ни не знает, это, скорее всего, какие-то самописные библиотеки для работы с базами данных тех, кто дал вам этот проект. Этих файлов в самом проекте нет? Может они приложены и их просто нужно подключить?
  Ответить с цитированием
Старый 19.08.2013, 11:00   #3   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
][irurg, откуда ты этот проект взял?
В некоторых случаях, проще написать с 0 на C#. Имея только рабочее приложение, и сам код. Он у тебя есть. Так что принцип работы ты знаешь.

P.S.
Наблюдал ситуацию, когда одна организация спионерила исходники, без компонентов. Пытались запустить но тщетно. Оказалось часть компонентов, было "обёрткой" для достаточно специфичных компонент. Пришлось выходить на программиста, который рассказал что и как.

Ах да, чуть не забыл... DWanek , +1
  Ответить с цитированием
Старый 19.08.2013, 11:12   #4   
highly mean
 
Сообщений: 1,128
Регистрация: 26.05.2011
Возраст: 35

silly вне форума Не в сети
Цитата:
Сообщение от Hopkroft Посмотреть сообщение
Наблюдал ситуацию, когда одна организация спионерила исходники, без компонентов. Пытались запустить но тщетно. Оказалось часть компонентов, было "обёрткой" для достаточно специфичных компонент. Пришлось выходить на программиста, который рассказал что и как.
Это, кстати, говорит не в пользу того программиста. Ну, знаете, bus factor и все такое.
  Ответить с цитированием
Старый 19.08.2013, 11:22   #5   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
silly, ) Bus Factor тут не причём. Я допустим при разработке программ, библиотеки или компоненты храню в отдельной папке. Т.к. иногда приходиться их обновлять или с новой версией экспериментировать.
Ещё один аргумент, вот у меня например, несколько проектов используют компонент FastReport. Я же не буду эти компоненты в каждую папку проекта совать.
Так что если скопировать папку Source, то исходники просто не откомпилируются, т.к. IDE не найдёт библиотек.
  Ответить с цитированием
Старый 19.08.2013, 12:41   #6   
Форумец
 
Аватар для ][irurg
 
Сообщений: 2,009
Регистрация: 14.07.2006
Возраст: 42
Записей в дневнике: 1

][irurg вне форума Не в сети
да, погуглил поглубже - видимо какие то самописные функции. В файле проекта библиотек нет.
Может сможете тогда в конвертации помочь?
Проблема в том, что в проге происходит раскодирование последовательности из базы данных скл. Последовательность выглядит примерно так -
OќnюRюT
набор сиволов. В скл выглядит чуть иначе чем тут. Всего 11 символов.
из этой строки должен получаться шестнадцатиричный код :
540052006E9D4F01

Переписываю алгоритм в си шарп, получаю хрень:
54144e52144e6e45c4f

Алгоритм перед раскодировкой обрабатывает исх строку и выкидывает эскейп-символы. Вот тут видимо и засада.
Вот алгоритм на делфи:
Цитата:
function DecodeEscapePos(str:shortstring):shortstring;
var i:integer;
len:integer;
begin
result:='';
len:=length(str);
i:=0;
while i<len do begin
inc(i);
if (str[i]=#254) then
begin
if str[i+1]=#1 then
begin
result := result + #0;
inc(i);
end else
if str[i+1]=#2 then
begin
result := result + #254;
inc(i);
end else
if str[i+1]=#3 then
begin
result := result + ' ';
inc(i);
end else
if str[i+1]=#4 then
begin
result := result + '\';
inc(i);
end else
if str[i+1]=#5 then
begin
result := result + #10;
inc(i);
end;

end
else
begin
result:=result+str[i];
end;
end;{while}
end;
С прогой на делфи приложили экзешник, вот он работает нормально. Вижу что вид исходной строки такой же как я читаю на си, те же символы. Однако видимо коды у них разные - из алгоритма видно, что 0х254 является основным эскейп символом, а у меня его в си вобще нет.
Прикладываю скриншот из си.
И ладно бы проблемы кодировки какие нибудь - другие то символы угадываются -
540052006E9D4F01 - что должно быть
54144e52144e6e45c4f - что получаю

54, 52, 6е - присутсвуют. 144e видимо должно в 00 превратится. 9D4F - код карточки который мне нужен, он там вобще не угадывается в том что получаю.
Миниатюры
Нажмите на изображение для увеличения
Название: си ошибка.jpg
Просмотров: 13
Размер:	42.5 Кб
ID:	2291482  
  Ответить с цитированием
Старый 19.08.2013, 12:47   #7   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
][irurg, 0х254 != #254
#254 значит в десятичном коде!
Сам посуди, откуда взяться такому символу? Таблица ASCII это вроде как 256 символов, а если ты переведёшь 254 из Шестрадцатеричной в десятеричную, то за её границы выйдешь.

В дельфи свои фишки с кодировкой. там например #13#10 равно '\n' из C/C++.
И вообще сделай через switch Так удобнее анализировать будет.

Последний раз редактировалось Hopkroft; 19.08.2013 в 12:52. Причина: Не все мысли изложил в одном посте...
  Ответить с цитированием
Старый 19.08.2013, 13:04   #8   
Форумец
 
Аватар для ][irurg
 
Сообщений: 2,009
Регистрация: 14.07.2006
Возраст: 42
Записей в дневнике: 1

][irurg вне форума Не в сети
Hopkroft, блин, я думал # в делфях символ шестнадцатиричных чисел. Причем где то даже натыкался в инете на такую статью. Сейчас еще раз посмотрел -
" В этом случае перед целым десятичным числом без знака, находящимся в интервале от 0 по 255, ставится специальный знак # . Например, #65 (литера A) | #40 (литера открывающаяся круглая скобка) | #36 (литера $)."

Но все равно непонятно, у меня в строке десятичных 254 тоже нет.

Цитата:
Сообщение от Hopkroft Посмотреть сообщение
Сам посуди, откуда взяться такому символу? Таблица ASCII это вроде как 256 символов, а если ты переведёшь 254 из Шестрадцатеричной в десятеричную, то за её границы выйдешь.
дык вот это и смутило. Посмотри на скриншот из Си - там и больше 1000 коды есть. Почему, откуда?
  Ответить с цитированием
Старый 19.08.2013, 13:10   #9   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
Цитата:
Сообщение от '
дык вот это и смутило. Посмотри на скриншот из Си - там и больше 1000 коды есть. Почему, откуда?
Уверен что это не Unicode? Я в C# не силён, но вот Java по умолчанию хранит в Юникоде.
По поводу 254 символа...Тут зависит от того кто тебе поток создаёт. Т.к. может какая-то функция генерирует сообщение с 254 символом в конце. Вот тогда он у тебя и появиться.
Кстати, Delphi (до включительно 2007) использовала ASCII, так что вероятность что в программе у тебя использовалось ASCII кодировка равна 100%. Тем более у тебя стоит тип ShortString.

P.S. или как вариант переменная "обрезается" до нужного типа.

Последний раз редактировалось Hopkroft; 19.08.2013 в 13:28.
  Ответить с цитированием
Старый 19.08.2013, 13:30   #10   
Форумец
 
Аватар для ][irurg
 
Сообщений: 2,009
Регистрация: 14.07.2006
Возраст: 42
Записей в дневнике: 1

][irurg вне форума Не в сети
Hopkroft, огромное сердечное спасибо! конечно это не ASCII был, cp1251.
две строчки все решили:
var encoding = Encoding.GetEncoding(1251);
var str = encoding.GetBytes(str1);

и там уже 254 символ присутствует.
  Ответить с цитированием
Старый 19.08.2013, 13:32   #11   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
][irurg, рад что помог. Удачной компиляции.

Последний раз редактировалось Hopkroft; 19.08.2013 в 17:51.
  Ответить с цитированием
Старый 19.08.2013, 19:29   #12   
highly mean
 
Сообщений: 1,128
Регистрация: 26.05.2011
Возраст: 35

silly вне форума Не в сети
Цитата:
Сообщение от '
конечно это не ASCII был, cp1251
Странные вы какие… Текст имеет кодировку, последовательности байт кодировки не имеют.

Последний раз редактировалось silly; 20.08.2013 в 00:07. Причина: Опять непонятно написал
  Ответить с цитированием
Старый 20.08.2013, 07:00   #13   
Форумец
 
Аватар для ][irurg
 
Сообщений: 2,009
Регистрация: 14.07.2006
Возраст: 42
Записей в дневнике: 1

][irurg вне форума Не в сети
silly, что есть текст как не последовательность байт )
  Ответить с цитированием
Старый 20.08.2013, 08:55   #14   
Форумец
 
Аватар для Spectator
 
Сообщений: 39,863
Регистрация: 27.05.2003
Возраст: 46

Spectator вне форума Не в сети
Цитата:
Сообщение от silly Посмотреть сообщение
Странные вы какие… Текст имеет кодировку, последовательности байт кодировки не имеют.
это ты странный, никак не можешь понять что текст - это и есть последовательность байт. последовательность байт можно рассматривать как текст, а текст - как последовательность байт.
автор свою проблему, как я понимаю, решил, так что мы никому не помешаем, тем паче что ему тоже сия таинственная тема сущности текста любопытна)))
  Ответить с цитированием
Старый 20.08.2013, 11:21   #15   
highly mean
 
Сообщений: 1,128
Регистрация: 26.05.2011
Возраст: 35

silly вне форума Не в сети
Цитата:
Сообщение от Spectator Посмотреть сообщение
это ты странный, никак не можешь понять что текст - это и есть последовательность байт. последовательность байт можно рассматривать как текст, а текст - как последовательность байт.
Spectator, ты, как обычно, неправ. Кодировка по определению есть сопоставление байтиков с буквами, если в бинарных данных не закодирован текст, то у них нет и кодировки.
  Ответить с цитированием
Старый 20.08.2013, 12:25   #16   
Registered User
 
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56

Hopkroft вне форума Не в сети
silly, ты можешь рассматривать последовательность байт как закодированный текст. Применяя к нему кодировку ты будешь менять его отображение.
Например, ты же когда открывать JPEG в текстовом редакторе, в зависимости от кодировки у тебя будут меняться буковки на экране.
Компьютеру плевать, что у тебя за данные. Как ты с ними работаешь так он и будет тебе их отображать.
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind