2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 Re: exe в Delphi 7, dll Builder 6
Сообщение06.06.2011, 13:01 
Заслуженный участник


27/04/09
28128
А разве ShareMem не надо вставлять первым в uses файла проекта? На что он отдельной форме?

 Профиль  
                  
 
 Re: exe в Delphi 7, dll Builder 6
Сообщение06.06.2011, 14:55 


01/07/08
836
Киев
arseniiv в сообщении #454660 писал(а):
А разве ShareMem не надо вставлять первым в uses файла проекта?

Да,именно так и делается.
arseniiv в сообщении #454660 писал(а):
На что он отдельной форме?


В задаче связки exe и dll, все выполняется(передача параметров и возврат данных из dll) а при закрытии формы задача извиняется за ошибку, вот поэтому я убрал загрузку и обращение к dll. В результате те же извинения.
Я смотрел обсуждение подобной темы на форуме профи по Делфи. Они забраковали TStreamAdapter, и для создания интерфейса использовали API, именно эту вставку я убрал и пришел к пустой форме.
С уважением,

 Профиль  
                  
 
 Re: exe в Delphi 7, dll Builder 6
Сообщение06.06.2011, 15:19 
Заслуженный участник


26/07/09
1559
Алматы
2hurtsy
Вы испробовали мой совет со свойством TMemoryStream.Memory без sharemem? Это наиболее правильный и простой вариант (необязательно работать с переданным указателем напрямую, его вполне можно прицепить к другому TMemoryStream и пользоваться со всеми удобствами)...

 Профиль  
                  
 
 Re: exe в Delphi 7, dll Builder 6
Сообщение06.06.2011, 16:18 


01/07/08
836
Киев
Circiter в сообщении #454722 писал(а):
Вы испробовали мой совет со свойством TMemoryStream.Memory без sharemem?


Прошу прощения :-( . Ваш пост скрылся от меня за постом arseniiv. Собственно я как раз передавал TMemoryStream.Memory, что я взял
из инернетовского обсуждения о котором я писал. Я надеюсь у нас не спор о приоритетах. :wink: Я прицеплял Memory к TMemoryStream функцией .Read, а как Вы это делаете. А обсуждение ShareMem мне не попадалось. Мне кажется там просто какая то описка, в больших проектах это неизбежно. С уважением,

 Профиль  
                  
 
 Re: exe в Delphi 7, dll Builder 6
Сообщение06.06.2011, 17:22 
Заслуженный участник


26/07/09
1559
Алматы
2hurtsy
Цитата:
Собственно я как раз передавал TMemoryStream.Memory, что я взял
из инернетовского обсуждения о котором я писал

А, понятно. Я-то опирался на те фрагменты кода, которые вы в этой теме выложили. Извиняйте. :)

Цитата:
Я прицеплял Memory к TMemoryStream функцией .Read

Боюсь, что придется воспользоваться наследованием от TCustomMemoryStream, чтобы иметь возможность вызывать SetPointer для связывания с буфером... Или работать с буфером как с обычной памятью, т.е. передавать указатель типа Pointer из свойства .Memory и размер типа Int64 из свойства .Size, и в таком виде использовать без привязки к обертке...

При использовании Read, видимо, надо предварительно делать SetSize или вместо этого всего применять ReadBuffer. Но в любом случае при этом будет осуществляться не "привязка", а (дорогое) копирование данных...

Цитата:
А обсуждение ShareMem мне не попадалось. Мне кажется там просто какая то описка, в больших проектах это неизбежно

Но у вас-то не тот случай с этим TMemoryStream'ом... Как я понимаю, проблемы возникают тогда, когда вы проводите операции с памятью, например с delphi-строками, в одном модуле (в "вызывающей программе"), используя при этом встроенный менеджер памяти, а потом с тем же куском памяти пытаетесь что-то делать в другом модуле (в библиотеке) тоже используя встроенный менеджер памяти, но уже скомпонованный с этим вторым модулем и хранящий свое состояние отдельно.

Казалось-бы, адресное пространство-то одно и тоже, но договорится между собой эти два менеджера никак не могут. Лечится только обращением к внешнему, общему для всех модулей менеджеру, неважно, системному или "фирменному" *mm.dll. И все это есть следствие самой философии delphi; при более классическом подходе таких вопросов-бы просто не возникло. :)

Впрочем, наверное вы правы... В крупном delphi-проекте (сразу вопрос в сторону, а с какого перепугу кто-то рискует поднимать крупные проекты на delphi? :) ) может быть все, в том числе и передача динамических объектов вроде строк и массивов между отдельно скомпилированными модулями (между прочим, применение внешнего менеджера памяти подразумевает некоторый оверхед по быстродействию)...

 Профиль  
                  
 
 Re: exe в Delphi 7, dll Builder 6
Сообщение07.06.2011, 11:31 


01/07/08
836
Киев
Спасибо, Circiter,worm2! Теперь я вооружен для понимания help's D7, BCB6 и более старших версий в направлении обсуждающейся темы.
worm2 спасибо за "козу".
Circiter в сообщении #454788 писал(а):
может быть все, в том числе и передача динамических объектов вроде строк и массивов между отдельно скомпилированными модулями

Для Вычислительной Математики это всегда насущная проблема, ведь развитие ОС на персоналках, имхо, идет в направлении удовлетворения потребностей игровых программ. С уважением,

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу Пред.  1, 2

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



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

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


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

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group