Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Embarcadero RAD Studio XE3

Автор: Aleksandr N
Дата сообщения: 10.01.2013 22:24
Arioch1
Я конечно почитаю, но судя по имеющимся там исходникам всё это слишком сложно для пары строк изменения в оригинальном исходнике.

Может кто-то предложит иной способ приведения заголовка к нужному размеру...?
Приветствуются (рассмотрю) самые безумные идеи.
Автор: Arioch1
Дата сообщения: 10.01.2013 22:38

Цитата:
структура "cinfo" жестко определена...

и правильно определена. Потому что в C такая же.

Разбирайся почему разные длины, може быть packed record надо или data alignment отключить...
Или ты таки делаешь 32-битные OBJ'и

Но это именно указатель и он должен быть 64 бита.

И еще раз скажу - возьми лучше другйо JPEG-декодер найди

Добавлено:

Цитата:
всё это слишком сложно

если так - то держись подальше от двочиный интерфейсов вообще. OBJ, DLL - ты с ними не справишься при малейшей проблеме.


Цитата:
иной способ приведения заголовка к нужному размеру

а зачем ?
Чтобы волшебная фея его скомпилировала как угодно ?
это же не самоцель.

Цель - чтобы совпала побайтовое расположение и побайтовый смысле всех полей в структуре.
Побайтово!
Низкий, двоичный уровень.

Даже если размер совпадет - ты сможешь проконтролировать, что какое-то поле там не сместилось на чуточку другое место ?

Твой исходный вопрос, если по простому: "помогите воткнуть мобильник в розетку, он туда не влезает, как бы его обточить". У тебя даже мысли не возникает, что форма розетки не просто так придумана и мобильник на 220В не рассчитан. И следовательно его туда не надо втыкать.

Я тебе очень не советую с таким опытом и представлением лезть в OBJ-файлы и другие бинарники.
Ищи готовые pure pascal библиотеки.
Автор: Aleksandr N
Дата сообщения: 10.01.2013 22:48
Arioch1
Разные длины именно из-за вот такой, определённой структуры записей:
Paaa = ^aaa;
aaa = record
aaaa: Integer;
end;

bbb = record
bbbb: Paaa;
end;
packed record ставил, не помогло

Цитата:
data alignment отключить

Это как?
Делаю ИМЕННО 64-битные OBJ.
Другой декодер - тоже вариант, но если только с этим ничего не получится, Кстати, краем глаза уже смотрел - по-моему у замеченных мной декодеров то-же какие-то проблемы под 64.
Автор: Arioch1
Дата сообщения: 10.01.2013 22:53
В C структура такая же.

Если не совпадает - разбирайся как именно отображаются в CLang и в Delphi разные типы данных на физическую низкоуровневую память при любых настройках компилятора.
И не забудь, что CLang в исполнение EMB очень глючный. Если ты им компилируешь, а не GCC/ICC/MSVC++/etc

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

И т.д.
Автор: Aleksandr N
Дата сообщения: 10.01.2013 22:58
Компилирую MVS 2010, с остальным попробую разобраться...
Автор: HeMet
Дата сообщения: 11.01.2013 14:32

Цитата:
Компилирую MVS 2010

Такс... VS вроде объектники создает в формате COFF, а Делфи использует и понимает только OMF. Наверное, нужно компилировать в Билдере.
И как уже говорили, нужно разбираться с выравниванием данных в структуре и добиваться двоичного соответствия, тогда при наличии исходников на С и Delphi не нужно будет ничего патчить в объектниках.

Цитата:
И не забудь, что CLang в исполнение EMB очень глючный

А на QC всего три бага открыто
Автор: AlekXL
Дата сообщения: 11.01.2013 15:04
Посоветуйте!
Мне нужен некоторый функционал РТТИ, или что-то подобное. Итак
1.Есть некоторый интерфейсный тип, ImyType, скажем, унаследованный от IDispatch
2.функция принимает экзепляр интерфейса ImyType, и массив аргументов array of const, или, быть может array of TValue,
3. и ей нужно вызвать некий метод экземпляра с некоторым именем, хранящимся в строке (e.g. 'Execute'), но сигнатура его неизвестна(неизвестны параметры)
4. то есть нужно в принципе реализовать стандартную COM авто диспетчеризацию,
НО
5. решение, крайне желательно, а)должно быть совместимо со стандатным Win32 COM,
б)НО не должно быть завязано лишь только на этой платформе.
---
в принципе, я поискал решения, но D2010 RTTI завязан на классы, а не на интерфесы, например
ti:=lContext.GetType((itask as TObject).ClassType );
так что все завязано на лишь только дельфийские классы. Это не то. Да еще , говорят, там полно багов
А я хочу, чтобы код мог вызывать методы экзепляра, реализованного даже на скриптовом языке с поддержкой IDispatch.

---
если же копать все же в интефейсную реализацию, то
1) есть ли межъязыковые интефейсы в unix-подобных(Мак, Линь) и Андроид системах?
2) как проще всего реализовать IDispatch для класса ? TAutoObject или что?
Автор: Blind
Дата сообщения: 11.01.2013 15:09
1. Как изменить базовый цвет фона по умолчанию для цветовой схемы (редактора кода)?
2. Можно ли экспортировать/импортировать цветовые схемы?
Автор: Aleksandr N
Дата сообщения: 11.01.2013 15:34
HeMet
Неа, начиная с XE2 идёт поддержка COFF. А под 64 в Билдере OBJ получить нельзя.
Проект компилируется без проблем, вот только не работает.
Автор: AlekXL
Дата сообщения: 11.01.2013 15:47

Цитата:
А под 64 в Билдере OBJ получить нельзя.
Проект компилируется без проблем, вот только не работает.
ну на выходе у билдера 64 линуксовые объектники. *.o а не *.obj. вроде в elf формате. интересно, может ли дельфи линкер понимать новый формат билдера?

Автор: Frodo_Torbins
Дата сообщения: 11.01.2013 16:22
Blind
http://theroadtodelphi.wordpress.com/delphi-ide-theme-editor/

AlekXL
Так IDispatch вроде как раз и реализует подобие RTTI. Что касается платформо-зависимости, то интерфейсы это просто соглашение о вызовах, бинарный интерфейс. Он реализуется компилятором, и от платформы не зависит. А вот полноценный COM - это уже другое дело, вряд ли он есть где то кроме винды. Хотя даже на винде он используется не всегда: http://www.gunsmoker.ru/2011/12/delphi.html
Автор: Arioch1
Дата сообщения: 11.01.2013 17:38

Цитата:
Делфи использует и понимает только OMF

в x86
но вроде бы нет 64-битного OMF OBJ и более того по слухам в dcc64 есть выдранные дизассемблером куски из VC++

Добавлено:

Цитата:
Можно ли экспортировать/импортировать цветовые схемы?

http://stackoverflow.com/questions/5248563

Добавлено:

Цитата:
1) есть ли  межъязыковые интефейсы в unix-подобных(Мак, Линь) и  Андроид системах?


Android - там все через Яву (Дальвик) делается - так, что скорее всего вопросбудет какие в языках связки с дальвиком.

В остальных... Есть, но весьма разные. В основном к какой библиотеке за основу привяжешься.

Например у многих языков есть "мосты" к основным C++ библиотекам - помните Kylix и Delphi CLX ?
http://ru.wikipedia.org/wiki/Qt
http://ru.wikipedia.org/wiki/GLib

Например Mozilla - http://ru.wikipedia.org/wiki/XPCOM

Например CORBA, одна реализаций была SOM/DSOM многоплатформная еще до COM
http://ru.wikipedia.org/wiki/CORBA
http://ru.wikipedia.org/wiki/Bonobo_(GNOME)
http://ru.wikipedia.org/wiki/KParts

А вообще это взя зависит от маршализации/сериализации, когда вместо вызова метода передается сетевой пакет "вызвать такой-то метод".
http://ru.wikipedia.org/wiki/Remote_Procedure_Call

mORMot вроде реализует JSON-RPC для Delphi 7 и FreePascal...

Последняя мода на Юниксах http://ru.wikipedia.org/wiki/D-Bus, а в истории много предыдущих примеров.

Выбирай :-D

Добавлено:

Цитата:
при наличии исходников на С и Delphi не нужно будет ничего патчить в объектниках.

Неужели не проще взять несколько других библиотек и проверить работают ли они в xe2 x64 с нужными тебе файлами ?
Несколько библиотек я уже называл

еще парочка
http://blog.synopse.info/post/2010/03/20/GIF%2C-TIF%2C-PNG-and-JPG-pictures-TGraphic-read/write-via-GDI
http://blog.synopse.info/post/2010/03/24/Fast-JPEG-decoder-using-SSE/SSE2-version-1.2


Автор: HeMet
Дата сообщения: 11.01.2013 19:11

Цитата:
Неужели не проще взять несколько других библиотек и проверить работают ли они в xe2 x64 с нужными тебе файлами ?

Я исходил из того, что кровь из носу нужно оставить эту библиотеку. А на сколько это в действительности принципиально, пусть автор вопроса решает
Автор: DeathMAD
Дата сообщения: 11.01.2013 19:12

Цитата:
но вроде бы нет 64-битного OMF OBJ и более того по слухам в dcc64 есть выдранные дизассемблером куски из VC++


А вот про это можно поподробнее? А то это как-то...
Автор: HeMet
Дата сообщения: 11.01.2013 20:38

Цитата:
А вот про это можно поподробнее?

http://www.codeproject.com/Articles/264103/Using-COFF-C-object-files-with-Delphi-X2 Про куски ничего, но зато по теме использования COFF объектников.
Автор: Arioch1
Дата сообщения: 12.01.2013 07:03
во время ругани по поводу XE3 всплывала инсайдерская инфа, а уж настоящая или поддельная - поди разбери

но если инсталлятор они пиратить могут - то почему копилятор нет ?
тем более, что в принципе обратная разработка ещё не пиратство.
впрочем, инсайдер говорил, что там именно куски ассемблерные, которые никто не понимает и на Я.В.У. переписать не можут.
Автор: AlekXL
Дата сообщения: 12.01.2013 10:41

Цитата:
Про куски ничего, но зато по теме использования COFF объектников.
об этом упоминал мистер Хейтер.
Может, и сам сочинил эту клюкву. В любом случае, даже он назвал эту инфу ГОЛОСЛОВНЫМ УТВЕРЖДЕНИЕМ.

--
у меня проблема с xe3 -строки в отладчике (watch, хинты) отображаются в C++ стиле, да еще и обрезанными..
Автор: Aleksandr N
Дата сообщения: 12.01.2013 11:28
Попробую сейчас в ветке по "С" поспрашать. Скорее всего придётся (если получится) изменять исходники самих OBJ. Может там можно указать, что тамошний аналог "Pointer" в 64 битах должен быть равен 8...
Автор: Arioch1
Дата сообщения: 12.01.2013 11:55

Цитата:
об этом упоминал мистер Хейтер.

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

утверждение более чем голословное, и если бы не история с InstallAware я бы посмеялся. А так... даже и не знаю.

Могли потом Майкрософтовцы не пустить Дельфи в WinRT из-за обиды ? хз... Вряд ли, конечно.

Кста, о Майкрософте. Интересное описание внутреннего соперничества и обид http://hal2020.com/2012/12/22/putting-expression-studios-demise-in-perspective/ + комменты
Автор: HeMet
Дата сообщения: 12.01.2013 18:09
При попытке прилинковать к проекту на Делфи obj файлов скомпилированных под VS 2010 вылезает куча неразрешенных зависимостей. И если с зависимостями на WinAPI понятно что делать, то что делать с зависимостями от сишных операторов new/delete? Т.е. вот такая ошибка:

Код: [dcc32 Error] DetourUsing.dpr(78): E2065 Unsatisfied forward or external declaration: '??3@YAXPAX@Z'
Автор: DeathMAD
Дата сообщения: 12.01.2013 18:49
extern "С" ?
Автор: Aleksandr N
Дата сообщения: 12.01.2013 18:57
HeMet
Вопрос:

Цитата:
dcc32 Error

Цитата:
скомпилированных под VS 2010

как это связано? Под 32 OBJ должны быть сделаны в Билдере, а под 64 в VS.
Автор: HeMet
Дата сообщения: 12.01.2013 19:25

Цитата:
extern "С" ?

Так можно заворачивать те функции, которые хочется использовать в коде на Делфи, а я говорю про случай, когда где-то в сишном коде используется что-то типа
Код: int *ia = new int[5]
Автор: DeathMAD
Дата сообщения: 12.01.2013 19:34

Код: operator_new := GetProcAddress(msvcrModule, '??2@YAPAXI@Z');
operator_delete := GetProcAddress(msvcrModule, '??3@YAXPAX@Z');
Автор: HeMet
Дата сообщения: 12.01.2013 19:55
DeathMAD
Компилятор Делфей изругается на такие имена, уже пробовал.
Автор: DeathMAD
Дата сообщения: 12.01.2013 20:05
А на C++ написать такой модуль и в obj его превратить?

И ещё вот такое собирается вполне


Код: library Project44;



function Test: Pointer; cdecl;
begin
Result := nil;
end;

exports
Test name '??2@YAPAXI@Z';

begin
end.
Автор: Arioch1
Дата сообщения: 12.01.2013 20:36
вот блин.... люди избалованные Паскалем.

Ну соберете вы такое - и что будет ? ведь вы не знаете что и как должна эта функция делать.

Ищите OBJ и LIB файлы, вам нужна RunTime Library Visual C++
А она, зарpраза, тоже разная бывает. Это не Дельфи с BPL, там на разные настройки компилятора разные OBJи

C:\RAD Studio\9.0\lib\win32\release\cp32mt.lib
C:\RAD Studio\9.0\lib\win32\release\cp32mti.lib
C:\RAD Studio\9.0\lib\win32\release\cw32.lib
C:\RAD Studio\9.0\lib\win32\release\cw32i.lib
C:\RAD Studio\9.0\lib\win32\release\cw32mt.lib
C:\RAD Studio\9.0\lib\win32\release\cw32mti.lib
C:\RAD Studio\9.0\lib\win32\release\c0d32.obj
C:\RAD Studio\9.0\lib\win32\release\c0d32w.obj
C:\RAD Studio\9.0\lib\win32\release\c0d32x.obj
C:\RAD Studio\9.0\lib\win32\release\c0fmx32.obj
C:\RAD Studio\9.0\lib\win32\release\c0fmx32w.obj
C:\RAD Studio\9.0\lib\win32\release\c0pkg32.obj
C:\RAD Studio\9.0\lib\win32\release\c0pkg32w.obj
C:\RAD Studio\9.0\lib\win32\release\c0s32.obj
C:\RAD Studio\9.0\lib\win32\release\c0w32.obj
C:\RAD Studio\9.0\lib\win32\release\c0w32w.obj
C:\RAD Studio\9.0\lib\win32\release\c0x32.obj
C:\RAD Studio\9.0\lib\win32\release\c0x32w.obj


И вот у вас такая же хрень с Visual C++ - ему тоже нужны разные файлы

Добавлено:
Но даже если вы их найдете и правильно добавите, те что надо, все равно может не хватить.

Потому что библиотека Delphi/Билдера и библиотека RTL будут у Windows требовать одни и те же ресурсы.
Память под heap, управление исключениями, системные ошибки какие-нибудь типа отладки или AV....

А ведь в Win64 исключения совсем по другому сделаны чем в win32

Смогут ли сжиться две RTL, если каждая будет считать себя главной ?
Автор: HeMet
Дата сообщения: 12.01.2013 20:43
Arioch1
Пробовал я проекту VS добавлять libcmt.lib и в настройках проекта ставил статическую линковку (/MT), но не помогло.
Собственно статья на MSDN: http://msdn.microsoft.com/en-us/library/abx4dbyh(v=vs.80).aspx
Автор: Arioch1
Дата сообщения: 12.01.2013 20:46

Цитата:
содержится в msvcrt.dll, но как об этом сказать компоновщику?


найти и линковать соответсвующий lib или obj файл.

сделай какой-нибудь exe в VC++ - а потом внимательно посмотри текстовые файлы для сборки.
Раньше он собирал через nmake и файлы *.mak

Сейчас VC++ собирает как и Дельфи через MSBUILD
В Дельфи файл для сборки *.dproj
Как он называется в VC++ не знаю, но там тоже должен быть XML-файл, который говорит, что и когда запускать. И в нем так или иначе говорится с какими библиотеками сам VC++ линкует свои объектники
Автор: AlekXL
Дата сообщения: 13.01.2013 09:56
Существует ли библиотека обобщений, в которой классы-контейнеры реализуют интерфесы?
e.g.
TList<T>=class(TEnumerable<T>, IList<T>)
...<declarations>
end;

---
добавлено: нашлась, существует! http://code.google.com/p/delphi-coll/

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738

Предыдущая тема: [Delphi XE2] Размер PNG


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.