2014 dxdy logo

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

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




На страницу Пред.  1, 2
 
 Re: exe в Delphi 7, dll Builder 6
Сообщение06.06.2011, 13:01 
А разве ShareMem не надо вставлять первым в uses файла проекта? На что он отдельной форме?

 
 
 
 Re: exe в Delphi 7, dll Builder 6
Сообщение06.06.2011, 14:55 
arseniiv в сообщении #454660 писал(а):
А разве ShareMem не надо вставлять первым в uses файла проекта?

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


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

 
 
 
 Re: exe в Delphi 7, dll Builder 6
Сообщение06.06.2011, 15:19 
2hurtsy
Вы испробовали мой совет со свойством TMemoryStream.Memory без sharemem? Это наиболее правильный и простой вариант (необязательно работать с переданным указателем напрямую, его вполне можно прицепить к другому TMemoryStream и пользоваться со всеми удобствами)...

 
 
 
 Re: exe в Delphi 7, dll Builder 6
Сообщение06.06.2011, 16:18 
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 
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 
Спасибо, Circiter,worm2! Теперь я вооружен для понимания help's D7, BCB6 и более старших версий в направлении обсуждающейся темы.
worm2 спасибо за "козу".
Circiter в сообщении #454788 писал(а):
может быть все, в том числе и передача динамических объектов вроде строк и массивов между отдельно скомпилированными модулями

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

 
 
 [ Сообщений: 21 ]  На страницу Пред.  1, 2


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group