Visual Basic 6.0 - Share/Unshare data в ActiveX Dll
Share/Unshare data в ActiveX Dll
From: Dmitry Miloserdov <dim [@] kemtel.ru>
Привет, All,
Я наверное что-то безвозвратно упустил в этой жизни, если задаю такой
вопрос :)
1. Как правильно построить обычное EXE приложение и ActiveX Dll чтобы
реализовать обмен данными между двумя приложениями?
Hапример:
В первой копии EXE:
MyDll.MySharedVar = "Hello world!"
Во второй копии EXE:
MsgBox MyDll.MySharedVar - должна выводить "Hello world" в
мессаджбоксе.
Про FileMapping не говорите :) К нему и приду, если не получится малой
кровью. Просто используется очень сложная структура данных и хотелось
бы один раз ее просчитать вместо очередного обсчета с каждой новой
инстанцией класса
2. Будет ли выгружена длл из памяти, если родитель (то приложение,
которое инициировала загрузку) установит MyDll в Nothing, но при этом
существует другое приложение, работающее с классом, или этого не
произойдет пока не закроются все приложения, использующие класс (но не
являющиеся инициаторами загрузки)?
3. Вопрос достаточно простой, если получу ответ на вопрос ¦1 (можно
решить установкой булевых переменных), но все же, может есть
стандартные решения: какие способы синхронизации лучше использовать,
чтобы избежать одновременного изменения общей переменной? Если ответ
на вопрос ¦1 = Это невозможно - то вопрос сам собой снимается.
4. А теперь - наоборот (в принципе, это у меня само собой получилось
:), но нужно именно для того, чтобы понять разницу): как правильно
построить EXE приложение и ActiveX Dll, чтобы абсолютно точно избежать
любой интерференции в вызовах одного и того же класса разными
приложениями?
--
Best regards,
Dmitry Miloserdov
- [if it ain't broke, don't fix it] -
* Origin: Talk.Mail.Ru (2:5020/400)
ErrorLevel
Respect to you, All!
Подскажите, плз, как перехватить сабж в VB?
Заранее благодарен.
Let it be, All
* Origin: If you wanna be, be a little bee...(c) (2:5033/39.7)
VB.NET пpогpаммисты
Здравствуйте, Artem!
Thursday January 22 2004 16:32, Artem Prokhorov -- All:
AP> Скажите, в эхе кто-нибyдь пишет пpогpаммы на VB.NET за деньги?
AP> Hе пpимеpы из сеpии Hello World в MSDN, и не на ASP.NET для сеpвеpов,
AP> а именно сеpьезные задачи на VB.NET?
"Серьезность" - вещь субъективная :) Можно немного конкретизировать этот термин, приведя соотв. примеры?
Лично я имею дело с .NET и VB .NET в частности более 1.5 лет (правда, в силу ряда соображений я примерно месяц назад полностью мигрировал в VC# .NET). Писал я на нем всякое - и простые приложения, и посложнее. Среди моих интересов можно отметить решение задач математической физики, но на .NET я еще не успел этим заняться, только сейчас приступаю, благо повод есть.
За деньги еще не писал, но всегда готов :)
Вообще при желании можно пообщаться в нетмыле.
AP> Или это еще совсем молодая платфоpма с хоpошими задатками, но
AP> бесполезная в обозpимом бyдyщем?
Тут совсем недавно была небольшая дискуссия на эту тему, начатая мной; не хотелось бы начинать ее снова. Здесь большинство уважаемых подписчиков пишет на VB6 и слезать с него не собирается, и кое-кто из них привел мне некоторое количество доводов в пользу этого. Правда, доводы эти _меня_ в большинстве своем совершенно не устроили. Hа основании своего скромного опыта специально для тебя рискну сказать следующее.
1. Да, молодая. Hо уже относительно молодая. Все-таки уже примерно два года прошло с момента ее появления, а это не так уж и мало. С лета доступна вторая Visual Studio .NET (2003), в которой проведена большая работа над ошибками по сравнению с предыдущей, первой студией .NET, коснувшаяся практически всех ее составляющих. Таким образом, уже имеется некоторая история. Hе за горами следующая студия, в которой в бейсике (в частности) обещают ряд вкусных новшеств.
2. Что касается бесполезности, то я бы не рискнул делать такие заявления. Многие, очень многие программисты буквально пищат от радости, когда сталкиваются с платформой .NET, и с удовольствием осуществляют миграции вида VB6 -> VB .NET и даже (VC++, Java) -> VC# .NET, отказываются от OWL, MFC, ATL и т.д., а также от технологии COM опять же в пользу платформы .NET. В ряде учебных заведений перестали преподавать VB6 и перековались на VB .NET. Еще пример: давай посмотрим, что сделала уважаемая фирма Borland за последнее время? Ихний WCL смотрится как-то незаметно на фоне компилятора C# (по слухам, кривоватого), а также свеженькой Delphi .NET. Без комментариев.
Мне известно о том, что ряд контор в СПб уже осуществил подобные миграции. Имеются соотв. вакансии.
По-моему, все вышеперечисленное говорит само за себя.
С уважением, Pasha
* Origin: СПбГПУ, ФПС, ПОПКиЛС, 3 семестр (http://www.avalon.ru) (2:5030/1212)
Re: exe+exe=exe
Мы где-то виделись, Alexander?
23 Jan 04 21:25:19 в RU.VISUAL.BASIC Alexander Abramencov -> мне:
DK>> Кстати, пpилинковать к пpогpамме объектник, написанный, напpимеp, на
DK>> ассемблеpе, можно и в случае VB6.
AA> Как? Если не секpет.
Об этом подробно рассказал John Chamberlain в статье "Take Control of the
Compile Process", опубликованной в VBPJ Nov '99.
Всего хорошего!
Дмитрий Козырев aka Master
* Origin: Дорогу осилит идущий. (2:5023/11.148)
Re: ErrorLevel
From: "A. Skrobov" <tyomitch [@] r66.ru>
Hello, Pavel!
You wrote in conference fido7.ru.visual.basic to "All" <fido7.ru.visual.basic [@] talk.ru>to All on Fri, 23 Jan 2004 22:21:32 +0300:
PB> Подскажите, плз, как перехватить сабж в VB?
The GetExitCodeProcess function retrieves the termination status of the specified process.
BOOL GetExitCodeProcess(
HANDLE hProcess, // handle to the process
LPDWORD lpExitCode // termination status
);
Parameters
hProcess
[in] Handle to the process.
Windows NT/2000: The handle must have PROCESS_QUERY_INFORMATION access. For more information, see Process Security and Access
Rights.
lpExitCode
[out] Pointer to a variable to receive the process termination status.
Return Values
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.
Remarks
If the specified process has not terminated, the termination status returned is STILL_ACTIVE. If the process has terminated, the
termination status returned may be one of the following:
The exit value specified in the ExitProcess or TerminateProcess function.
The return value from the main or WinMain function of the process.
The exception value for an unhandled exception that caused the process to terminate.
--
To prevent your mail from being filtered out, simply quote this line in your message body. A464E022
* Origin: Talk.Mail.Ru (2:5020/400)
Re: Share/Unshare data в ActiveX Dll
From: "A. Skrobov" <tyomitch [@] r66.ru>
Hello, Dmitry!
You wrote in conference fido7.ru.visual.basic to "All" <fido7.ru.visual.basic [@] talk.ru> on Fri, 23 Jan 2004 19:07:54 +0000 (UTC):
DM> 1. Как правильно построить обычное EXE приложение и ActiveX Dll чтобы
DM> реализовать обмен данными между двумя приложениями?
DM> Hапример:
DM> В первой копии EXE:
DM> MyDll.MySharedVar = "Hello world!"
DM> Во второй копии EXE:
DM> MsgBox MyDll.MySharedVar - должна выводить "Hello world" в
DM> мессаджбоксе.
Мне кажется, никак. У каждого процесса своё адресное пространство, и DLL загружается отдельно в адресное пространство каждого
процесса.
Возможно шарить данные только через ActiveX EXE, если Instancing установлен в MultiUse.
DM> Про FileMapping не говорите :) К нему и приду, если не получится малой
DM> кровью. Просто используется очень сложная структура данных и хотелось
DM> бы один раз ее просчитать вместо очередного обсчета с каждой новой
DM> инстанцией класса
Так много есть чего: WM_COPYDATA, трубы, мэйлслоты, винсок...
--
To prevent your mail from being filtered out, simply quote this line in your message body. A464E022
* Origin: Talk.Mail.Ru (2:5020/400)
Re: ErrorLevel
Мы где-то виделись, Pavel?
23 Jan 04 22:21:32 в RU.VISUAL.BASIC Pavel Balandin -> All:
PB> Подскажите, плз, как перехватить сабж в VB?
CreateProcess -> MsgWaitObj -> GetExitCodeProcess -> CloseHandle.
Всего хорошего!
Дмитрий Козырев aka Master
* Origin: Дорогу осилит идущий. (2:5023/11.148)
Re[2]: Share/Unshare data в ActiveX Dll
From: "A. Skrobov" <tyomitch [@] r66.ru>
Sat Jan 24 2004 14:42, Dmitry Miloserdov wrote to A. Skrobov:
DM> Угу. Только сбивает с правильного курса справка о таких вещах как
DM> GlobalMultiUse
Это значит, что один и тот же экземпляр DLL обслуживает все объекты в данном
приложении, т.е. мультиюз "локальный".
DM> и Thread Pool.
Это вообще относится не к разным процессам, а к разным нитям одного процесса,
и к разделению данных приложениями отношения не имеет.
DM> Вот я и подумал - кто его знает, может и
DM> правда есть какая-то фича - мы же имеем доступ к свойствам одного и
DM> того же документа MS Word?
MS Word - это ActiveX EXE, и противоречия со сказанным мной нет.
* Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)
Re[3]: Share/Unshare data в ActiveX Dll
From: Dmitry Miloserdov <dim [@] kemtel.ru>
Привет, A.,
Saturday, January 24, 2004, 7:52:31 PM, ты писал:
AS> MS Word - это ActiveX EXE, и противоречия со сказанным мной нет.
А кто то сказал что здесь противоречие? :)
--
Best regards,
Dmitry Miloserdov
* Origin: http://www.softmajor.com (2:5020/400)
Re: exe+exe=exe
Шчасця цябе, _Dmitriy_!
DK>>> Кстати, пpилинковать к пpогpамме объектник, написанный, напpимеp, на
DK>>> ассемблеpе, можно и в случае VB6.
AA>> Как? Если не секpет.
DK> Об этом подpобно pассказал John Chamberlain в статье "Take Control of the
DK> Compile Process", опубликованной в VBPJ Nov '99.
а можно уpл на статью? (желательно на pусский пеpевод)
Божа, баpанi Белаpусь!
* Origin: Stay METAL!!! (2:451/22.19)