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

» Вопросы по Embarcadero RAD Studio XE2 (Pulsar)

Автор: 0D0A
Дата сообщения: 14.12.2011 14:50
mdid
ShareMem в uses есть?
Зачем строка:
l1 :=Tstringlist.Create;
если список создается в длл?
Автор: zedxxx
Дата сообщения: 14.12.2011 14:50
mdid
А разве можно вот так запросто передавать и юзать из dll динамические объекты? Менеджеры памяти то разные.
Автор: AnViSe
Дата сообщения: 14.12.2011 15:41
Frodo_Torbins
В $(BDS)\Lib есть каталог win32 с двумя подпапками в которых есть system.dcu

Ludens
Есть оно там, и не только оно...
Автор: Frodo_Torbins
Дата сообщения: 14.12.2011 16:13
AnViSe
Хз, проверьте хеш образа из которого ставили студию.

mdid
Без использования рантайм пакетов передавать классы из проги в длл и обратно нельзя. Только интерфейсы.

0D0A
ShareMem тут не поможет, т к передается класс, а для WideString он вообще не нужен.
Автор: AnViSe
Дата сообщения: 14.12.2011 16:27
Frodo_Torbins
Пока не добавил в Tools - Options - Library - Library Path:
строку
C:\Program Files\Embarcadero\RAD Studio\9.0\lib\win32\release
не пахало.

А при вставке строки
C:\Program Files\Embarcadero\RAD Studio\9.0\lib\win32\debug
вместо указанной выше, начало ругаться на фалы *.res
Автор: Frodo_Torbins
Дата сообщения: 14.12.2011 16:38
AnViSe
Что то у вас слишком уж сильно побиты настройки студии. Я бы ее пожалуй переустановил. Что касается отладочных dcu-шек, то они прописываются в Debug DCU path.
Автор: mdid
Дата сообщения: 14.12.2011 17:00
там же в той же dll есть

Код:
function GetRegSect(key:integer;path:widestring):TStringList;stdcall;
var
Reg : TRegistry;
begin
result:=TStringList.Create;
Reg := TRegistry.Create;
Reg.RootKey :=DWORD(key);
Reg.OpenKey(path, false);
Reg.GetValueNames(result);
reg.Free;
end;
Автор: zedxxx
Дата сообщения: 14.12.2011 17:08

Цитата:
попробую вместо TStringList возвращать pointer

Сути не меняет.
Автор: mdid
Дата сообщения: 14.12.2011 18:45
еще одно "чудесо"..эксепшн появляется только если запускать прогу со среды разработки...если запустить готовый экзешник то все норм...черт я прям даже не знаю как реагировать на хе2
Автор: Varenik
Дата сообщения: 14.12.2011 19:04
mdid
Я чёт не пойму -а кто вам мешает в Tag хранить указатель на array of Variant?
Автор: mdid
Дата сообщения: 14.12.2011 19:14
Varenik
да это все удобство...хотелось бы еще в дизайн тайие редактировать массив array of Variant и тд...мне то ничего не мешает..на данный момент я просто определяю нужные переменные в разделе publuc и все...черт я то думал не только у меня горе с тегом...а оказывается видимо только у меня))
Автор: Frodo_Torbins
Дата сообщения: 14.12.2011 19:29
mdid
Еще раз, обьектами между длл и экзешником обмениваться нельзя. Только интерфейсами. Ну или включать и там и там рантайм пакеты. А что касается D2010 то там это работало по чистой случайности.
Автор: ppkp
Дата сообщения: 14.12.2011 19:36
mdid

Цитата:
эксепшн появляется только если запускать прогу со среды разработки...если запустить готовый экзешник то все норм...

Tools->Options->Debugger Options->Language Exceptions->Кнопка Add->Вписываем к примеру EConvertError или что нужно

А при выполнении в IDE при появлении exception пометить checkbox "Ignoge this exception type" (точно не помню название)
Автор: AnViSe
Дата сообщения: 15.12.2011 08:21
Ну я бы так явно не отключал бы отображение ошибок. Мало ли в будущем может вылезти грабель где нибудь.
Автор: ppkp
Дата сообщения: 15.12.2011 12:48
AnViSe
Ну так можно удалить данный exception через те же Tools->...
Автор: Arioch1
Дата сообщения: 15.12.2011 23:18
Frodo - ну вообще если пропатчить VMT то можно... не так чтобы вообще нельзя.

Но тогда руками надо столько всего контролировать, что компилятор сам в BPL делает, что лучше не надо

mdid - а потом тебе понадобится поменять дизайн окна, не трогая логики, и будет... весело.
Да и названия процедур бессмысленные получаются.

Если хочется данные в рантайме редактировать - то м.б. какой-нибудь in-memory table подойдёт ? Может быть NExusDB, когда они бесплатный Embedded наконец выпустят для XE2

Добавлено:

Цитата:
непонятно с тем почему все работает если дебагидить из под dll


а по-моему понятно. Отладчик пытается эту переменную распознать, данные на экран вывести или ещё что. А тут оказывается у тебя два разных типа TStringList, два разных типа TObject, два разных юнита Vcl.Forms и т.д. Крыша и едет...
Попробуй "если дебагидить из под dll." создать и и просмотреть stringlist созданный в основном приложении и например переданный в DLL. По идее симптомы должны быть похожие.
Автор: Ludens
Дата сообщения: 17.12.2011 21:57
Существует ли в XE2 возможность отменить принудительное использование в новых проектах двойных имен для системных библиотек (Winapi.Windows, System.Classes и т. д.)?
Неужели нельзя сделать, чтоб было как раньше — Windows, Classes и т. д.?
Автор: Arioch1
Дата сообщения: 17.12.2011 23:19
так ты их можешь не писать, компилятор будет сам угадывать первую часть имени. По крайней мере если последняя часть имени уникальная.

http://docwiki.embarcadero.com/RADStudio/en/Delphi_Compiler - параметр Unit scope names
http://docwiki.embarcadero.com/RADStudio/en/Unit_Scope_Names
http://wiert.wordpress.com/2011/11/17/delphi-xe2-unit-scope-tables/

Автор: Ludens
Дата сообщения: 17.12.2011 23:35
Arioch1

Цитата:
так ты их можешь не писать

Я-то могу. А вот RAD... Может ли RAD не вставлять первую часть имени модуля, когда автоматически добавляет его в раздел uses?
Большой беды, конечно, в этом нет: в конце концов, можно эти первые части имен удалять просто руками. Студия на это не ругается и насильно их потом не восстанавливает.
Но хотелось бы все же, чтоб она их с самого начала не вставляла — например, при создании нового проекта. Ведь есть же где-то в недрах служебых файлов что-то вроде шаблона кода для нового проекта? Может быть, там можно подправить?
Автор: Frodo_Torbins
Дата сообщения: 17.12.2011 23:50
Ludens
В старых версиях оно было в ресурсах, и я вроде даже правил. Но это только те модули, которые есть в юзес изначально. Те, которые добавляются при добавлении контролов, все равно придется править.
Автор: Arioch1
Дата сообщения: 18.12.2011 00:11
вряд ли.
это ж не шаблон, это ж подпрограмма, найти компонент, определить его полное имя, выделить в ней имя модуля и вставить, если его ещё не было.

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

Просто в Delphi как файлы в DOSe учились называть модули так, чтобы не было пересечений.
А теперь все идет всторону Явы и .Net'a (который лично мне в целом нравится).

Вместо JediVCL.ComCtrls делали имена типа JvComCtrls и так далее - а ведь само по себе так "склеивать" уродливо

И есть у тебя например TButton в Vcl.ComCtrls и в JVCL.ComCtrls и в каком-нибудь LMDTools.ComCtrls и в TMS.ComCtrls - и бросаешь ты эти кнопки на форму и добавляется тебе в uses один единственный ComCtrls... - какой из 4-х ??? Если программа умеет только вставлять по одному разу каждое уникальное имя юнита - то на неуникальных она просто тупо сломается, даже если ты надёшь этакий шаблон и его поправишь.

Ведь теперь, когда имена стали разделяться на части, самый смысл давать последние имена одинаковые, осмысленные.
Как в той же Яве обычно есть bla-bla-bla.Interface и bla-bla-bla.Impl(ementation) - и это традиция и часто испольузется. И в Delphi будет так же с временем. И неполные имена будут из небольшого типичного набора.

Другой вопрос, что могли б вложенными сделать. Типа как with (а по большому счёты чем отличаются uses и with?)
На манер variant records - Uses VCL (uses Forms, Graphics, ComCtrls), System (Classes, SysUtils, Strings), ...
Или на манер with - Uses VCL, Forms, Graphics, ComCtrls, ...
Автор: Ludens
Дата сообщения: 18.12.2011 00:13
Frodo_Torbins
ну хоть те, которые возникают в uses совершенно нового дефолтного проекта. Каким образом можно хотя бы их зачистить от scope names?
Автор: Frodo_Torbins
Дата сообщения: 18.12.2011 11:05
Ludens
Открываем редактором ресурсов delphivclide160.bpl, находим там "RC Data\VCLIDECMD" и правим. В разных bpl-ках можно найти заготовки разных модулей, но расширенные имена юнитов я заметил только в этой.
Автор: Ludens
Дата сообщения: 18.12.2011 12:01
Arioch1

Цитата:
могли б вложенными сделать. Типа как with

Да, я тоже часто об этом думаю...
Вообще, ты грамотно все описал. С именованием библиотек сейчас происходит что-то вроде того, что было с именами файлов в позднем DOS: старая система нейминга уже не справляется с возросшими объемами и разнообразием, а новая вынуждена быть совместимой, что накладывает...
Что-то вроде with сделают обязательно: ну, просто никак невозможно этого не придумать. Но пока, к сожалению, новые разделы uses в XE2 выглядят крайне уродливо, и с этим надо что-то делать уже сейчас.

Добавлено:
Frodo_Torbins

Цитата:
Открываем редактором ресурсов delphivclide160.bpl, находим там "RC Data\VCLIDECMD" и правим.

Точно! Есть! Попробую еще заменить этот ресурс одноименным из delphivclide150.bpl...
Автор: Arioch1
Дата сообщения: 18.12.2011 20:38
толькo не забудь оригинальный файл сохранить, чтобы вернуть перед следующим апдейтом

Добавлено:
про uses я в общем ничего своего и не выдумывал.

То что надо по возможности yнифицировать объекты и модули поняли ещё в Java и в C++ когда добавляли namespace's.

Вложенные uses'ы, (кажется дополнительно ещё и работающие как with) есть в той же Скале.
http://jcranky.com/2009/08/18/import-statements-in-scala/
http://www.ibm.com/developerworks/ru/library/j-scala07298/
Автор: BofA
Дата сообщения: 19.12.2011 15:36
После установки Update 3 появилась странная проблема: периодически перестают работать сочетания Ctrl+Shift+Up/Down. Перезагрузка обычно спасает на какое-то время. Никто не сталкивался с подобным?
Автор: 0D0A
Дата сообщения: 19.12.2011 16:08
BofA
По моему опыту, они никогда нормально не работали с момента появления фичи (вроде в Д6).
Автор: Ludens
Дата сообщения: 19.12.2011 16:30

Цитата:
они никогда нормально не работали с момента появления

и Error Insite стабильно глючит с момента появления...
Когда же это закончится, а?
Автор: BofA
Дата сообщения: 19.12.2011 17:43

Цитата:
По моему опыту, они никогда нормально не работали с момента появления фичи (вроде в Д6)

"Нормально" может и никогда не работали, но было вполне терпимо, лучше, чем без них Но теперь они зачастую вообще никак не работают, что сильно раздражает.
Вот Error insight приходится отключать, количество багов там превосходит все разумные цифры.
Автор: Frodo_Torbins
Дата сообщения: 19.12.2011 21:03
Работе Глюкам Error insight нечего удивляться - это код написанный на мертвом .NET языке, к тому же никак не связанный с компилятором. Вся надежда на обновленный модульный компилятор, который возможно позволит, наконец, выкинуть этот J# на свалку.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738

Предыдущая тема: Как сделать offline версию сайта со встроенным браузером?


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