Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 28 • Страница 2 из 2<  1  2
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 18.01.2004
Фото: 0
Значит так, джентельмены:
1. Использовать классы делфи, инициализированные в основном приложении, в делфиевской DLL можно только в случае
компиляции приложения и DLL с run-time пакетами. Иначе DLL просто не понимает что TForm, например, из основного приложения это
тоже самое что и TForm в DLL, потому как у разные указатели на описатель класса в RTTI.
2. Смешивать распределение и уничтожение блоков памяти в основном приложении и DLL, а также передавать строки (string) можно
при наличии общего менеджера памяти, который включается с использованием юнита ShareMem.

_________________
Да гоните вы все!



Партнер
 

Member
Статус: Не в сети
Регистрация: 01.10.2003
Откуда: Тюмень
тут еще такой вопрос возник
чем отличается, например:

FValue := (N as TNumericNode).AsFloat;
от
FValue := TNumericNode(N).AsFloat;

_________________
Когда ты закрываешь глаза, то видишь пустоту. Она без движения и спрятана в черный цвет.


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
_Alex_ Ничем в принципе , но лучше юзать первый вариант. По идее 1 вариант для классов, а второй для простого приведения типов. В такм к примеру виде dword(a)


 

Member
Статус: Не в сети
Регистрация: 01.10.2003
Откуда: Тюмень
вот-вот. я тож первый вариант юзаю по возможности. как научили :)

однако как я писал в своих первых постах
FValue := (N as TNumericNode).AsFloat; - invalid class typecast

а вот как оказалось
FValue := TNumericNode(N).AsFloat; - без ошибок вроде (не сглазить бы), хотя надо еще тестить.
N : TNode, т.е. экземпляр класса

_________________
Когда ты закрываешь глаза, то видишь пустоту. Она без движения и спрятана в черный цвет.


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Ну когда не пашет 1 используй второй вариант :) Я сейчас точно не могу вспомнить конкретное отличие этих двух методов. Надо в хелп глянуть


 

Member
Статус: Не в сети
Регистрация: 18.01.2004
Фото: 0
_Alex_
В первом варианте происходит проверка является ли N классом TNumericNode или его потомком. Если нет то возникает
exception. Во втором варианте проверки нет и если N не TNumericNode или его потомок, то последствия непредсказуемы -
в большинстве случаев будет общая ошибка защиты.

_________________
Да гоните вы все!


 

Member
Статус: Не в сети
Регистрация: 01.10.2003
Откуда: Тюмень
Frags
может проверка это все же - if (N is TNumericNode) then ....

просто мне интересно стало почему

Value := (N as TNumericNode).AsFloat; - invalid class typecast
а
FValue := TNumericNode(N).AsFloat; - работает.
это конечно при хитрых вызовах из dll. :)

_________________
Когда ты закрываешь глаза, то видишь пустоту. Она без движения и спрятана в черный цвет.


 

Member
Статус: Не в сети
Регистрация: 15.04.2004
Откуда: Москва
_Alex_
Ты винмательно почитай как работают as и is.
Тебе же черным по белому написано, что если as не может привести к требуемому типу (а может или нет она вытягивает из RTTI), то генерит ик-сепшн, в отличии от Цешного dynamic_cast, а Тип() приводит к типу наплевав на RTTI, и шмякнутся ты сожешь позже.

_________________
Цель жизни - d20 по жизни...


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 28 • Страница 2 из 2<  1  2
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan