|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Lisp и внешний сервер автоматизации на Delphi
Регистрация: 16.06.2010
Сообщений: 43
|
||
Просмотров: 5055
|
|
||||
Ищу работу Регистрация: 12.06.2010
Сообщений: 35
|
На C++ это решается с помощью цикла в функции WinMain:
Код:
Т.е. никакая главная "фома" не создается. Что-то подобное, наверное, можно поискать и в дельфи. А лучше переходи на C#.NET.
__________________
На свете счастья нет, но есть покой и воля. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Правильно ли я понимаю, что твой "внутренний сервер автоматизации в виде dll", это проект, у которого в dpr-файле записано:
Код:
Вопрос "будут ли нормально взаимодействовать 64-битовый AutoCad и 32-битовый внешний COM-сервер" легко проверить - сделай тестовый. Ведь откуда-то ты взял, что 32-разрядную dll использовать нельзя. Проверял? Я вот не могу проверить - нет ни 64-разр ОС, ни 64-разр AutoCAD Могу только предположить, что внешний сервер будет работать. Проверить не могу. Вопрос этот меня тоже интересует. Ну, а запуск сервера без главной формы делается элементарно. В dpr надо руками убрать Application.CreateForm, а ShowForm сделать только в частях кода, вызываемых из клиента. Я так думаю. |
|||
![]() |
|
||||
Регистрация: 16.06.2010
Сообщений: 43
|
Цитата:
В отношение Application.CreateForm - эту строчку я заремил. В LISPe функция vlax-get-or-create-object выдает nil. Если же оставить Application.CreateForm, то функция vlax-get-or-create-object выдает объект |
|||
![]() |
|
||||
Цитата:
Почитал, что появился (или вот вот появится) Delphi XE2 - позволяющий создавать как 32-разрядные, так и 64-разрядные приложения и dll: http://blogs.embarcadero.com/vsevolo...readyforlaunc/ Последний раз редактировалось Александр Ривилис, 05.10.2011 в 00:53. |
||||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
В Сети можно найти ряд способов, например здеся или тут Особенно интересен способ описанный в MSDN Вроде бы достаточно в реестр записать Код:
Что касается Delphi, то последыши Borland своей бездарной политикой сделали всё, чтобы угробить замечательное средство разработки. Всё появляется слишком поздно - и UTF, и 64-bit. Конечно, надо переходить на современные системы, беда в том, что они не становятся лучше. Не случайно очень многие до сих пор работают в последней надежной Delphi7. |
|||
![]() |
|
||||
Регистрация: 16.06.2010
Сообщений: 43
|
Цитата:
Application.Initialize; //Application.CreateForm(TForm1, Form1); Application.Run; В диспетчере задач процесс не виден |
|||
![]() |
|
||||
Ищу работу Регистрация: 12.06.2010
Сообщений: 35
|
Как вариант, можно не комментировать Application.CreateForm(TForm1, Form1); При первом запуске сервера форма будет видима. А чтобы её убрать, нужно предусмотреть метод, делающий её свойство Visible = false и вызывать этот метод из клиента. Что-то типа:
Код:
А то можно даже и не из клиента, а на форме сделать кнопку, типа "Хочешь, я исчезну из вида". Но лучше, все таки, из клиента. Вызов любого метода автоматом запустит сервер. Он мелькнет лишь на мгновение, поскольку сразу же последует вызов метода SetVis и сделает его невидимым.
__________________
На свете счастья нет, но есть покой и воля. Последний раз редактировалось Sad Dog, 05.10.2011 в 10:59. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
|
|||
![]() |
|
||||
Регистрация: 16.06.2010
Сообщений: 43
|
Цитата:
Да, этот метод я могу включить в интерфейсный метод COM-объекта. Но прежде, чем обратится к COM-объекту через интерфейсный метод, я должен у клиента отработать функцию (vlax-get-or-create-object ). А эта функция запускает приложение на сервере с его главной формой. |
|||
![]() |
|
||||
Ищу работу Регистрация: 12.06.2010
Сообщений: 35
|
Цитата:
А еще лучше попробовать, как советует "полковник Вьетнамской народной армии" ![]()
__________________
На свете счастья нет, но есть покой и воля. Последний раз редактировалось Sad Dog, 06.10.2011 в 17:53. |
|||
![]() |
|
||||
Регистрация: 16.06.2010
Сообщений: 43
|
На клиенте:
(setq objD (vlax-get-or-create-object "C.Dlg")) (vlax-invoke-method objD "Dial" "VisNo") На сервере: Application.Initialize; Application.CreateForm(TForm1, Form1); Form1.Visible:=false; Application.Run; В интерфейсном методе "Dial" входной параметр строка, которая сервером анализируется и в зависимости от содержания, запускаетя та или иная модальная диалоговая форма. Если строка="VisNo", то выполняется Form1.Visible:=false; |
|||
![]() |
|
||||
Регистрация: 17.08.2006
Israel
Сообщений: 19
|
Как правильно указал Александр Ривлис,Delphi XE2 успешно решает проблему. Достаточно перекомпилировать dll с Target Platform 64-bit Windows и все прекрасно работает без всяких ухищрения на 64 Windows и 64 Автокад (я пробовал на 2012 и 2011). Delphi XE2 не только вышла, но даже есть update 1.
__________________
Sevich |
|||
![]() |
|
||||
Регистрация: 16.06.2010
Сообщений: 43
|
Цитата:
;(vlax-invoke-method objD "Dial" "VisNo") или на сервере сделать: //Form1.Visible:=false;, то диалоги работают на фоне пустой главной формы Сколько стоит? |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Документация Проектировщику на Torrents | DEM | Разное | 263 | 03.09.2024 12:25 |
{Конкурс} Lisp. Задачки для студентов | gomer | LISP | 10 | 05.01.2011 16:33 |
загрузка DOS прог через LISP | Gaa | LISP | 15 | 12.08.2005 19:19 |