|
1c + COM написанный на DelphiXE2 | ☑ | ||
---|---|---|---|---|
0
qeos
04.05.12
✎
11:50
|
ктонить такое делал?
есть пример? |
|||
1
H A D G E H O G s
04.05.12
✎
11:56
|
Делал.
Какие трудности возникли? |
|||
2
qeos
04.05.12
✎
12:02
|
ну по существу..
в обычном приложении есть событие: procedure OnStatusChange(Sender: TObject; aEvent: longint; aExtendedErrorCode: Longint; const aMessage: string); я добавил IConnectorEvents - OnStatusChange в интерфес, в этом событии ShowMessage.. но оно ни разу не вызывается. т.е. вызовы функций кома работают из 1С, но никаких окон не всплывает. собственно как вообще делается события и как они обрабатываются? |
|||
3
qeos
04.05.12
✎
12:05
|
и вообще есть описание 1CIts/EXE/VNCOMP82/doc/ExtCompT.htm
но толи я его не понимаю толи я не так делаю.. я делаю как в http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=539119 но в описании: Модальные диалоги создаются самой компонентой, но при их создании необходимо в качестве родительского окна указать окно, возвращаемое методом GetAppMainFrame для того, чтобы диалог не воспринимался операционной системой как отдельная задача с кнопкой на полосе задач как это вызвать из компоненты? чтото непонятно это все. |
|||
4
H A D G E H O G s
04.05.12
✎
12:07
|
Кинь проект на [email protected]
|
|||
5
qeos
04.05.12
✎
12:15
|
ушло
|
|||
6
H A D G E H O G s
04.05.12
✎
12:27
|
Половины pas файлов нету, нету примера в 1С, непонятно, кто должен вызывать OnStatusChange(), квик, dll, или 1С.
Бида. |
|||
7
qeos
04.05.12
✎
12:31
|
ща объясню..
есть dll для работы с терминалом.. при ее инициализации мы указываем callback функцию для обработки событий (стр 112 в QConnector.pas), после этого события вызывают функцию OnStatusChange. так вот чтото они при использовании Com объекта не работают.. т.е. непонятно, может такое вообще невозможно реализовать (( |
|||
8
H A D G E H O G s
04.05.12
✎
12:37
|
Пишушуюся DLL -ка - это прокладка между 1С и dll-терминалом?
|
|||
9
H A D G E H O G s
04.05.12
✎
12:37
|
Как call-back прописываешь?
|
|||
10
H A D G E H O G s
04.05.12
✎
12:38
|
Ибо есть хитрость:
Delphi. Методы объектов как то по другому хранятся в памяти? |
|||
11
H A D G E H O G s
04.05.12
✎
12:38
|
Пост 11 в ветке (10) объясняет эту хитрость.
|
|||
12
qeos
04.05.12
✎
13:37
|
ну.. вызов-то все равно должен происходить? даже если там все подпорчено, то и брекпоинт должен сработать и выдать сообщение должно, может и с запорченным текстом но окошко-то должно показаться?
и еще. а эту твою ситуацию разными директивами нельзя поправить? а-ля StdCall и типо того. |
|||
13
qeos
04.05.12
✎
14:04
|
накопал кое что.. возможно у меня не вызывается CreateHandle от TWinControl..
собственно два вопроса: почему и как здалать чтоб он вызвался? |
|||
14
H A D G E H O G s
04.05.12
✎
14:10
|
(12) Вызов и не должен вызываться, если ты адрес функции неправильно указываешь.
|
|||
15
Serginio1
04.05.12
✎
15:15
|
(14) Если он указывает адрес объектной функции то вызов должен произойти, просто при этом в регистре EAX вроде не будет значения Self, что может привести краху если будет обращения к полям объект.
(0) Посмотри http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=2019 там есть примеры работы с окнами. В том числе и Исходник ВК которая загружает Объект Автоматизации поддерживающий ITypeInfo и выполняет все его свойства и методы через IlanguageExtender сам им пользуюсь уже лет 10. В том числе и для СОМ на C#. |
|||
16
qeos
04.05.12
✎
15:22
|
не.. у меня есть часть кода которая делает callback.. там в начале:
// ============================================================================= procedure ConnectionStatusCallback(nConnectionEvent : LongInt; nExtendedErrorCode : LongInt; lpcstrInfoMessage : LPCSTR); stdcall; var Itm : PReplyQueueItem; begin if Assigned(ReplyQueue) and (ComponentHandle <> 0) then begin Но условие не проходит и вызова нет.. ReplyQueue вроде как создается, а вот ComponentHandle это procedure CreateHandle; override; .... procedure .CreateHandle; begin inherited; ComponentHandle := Handle; end; этот CreateHandle наследуется от TWinControl.. вызова этой процедуры почемуто не происходит... вот щас копаю почему... |
|||
17
qeos
04.05.12
✎
15:26
|
слушай, вот есть у меня функция у кома, а как показать какоенибудь окно? создавать его програмно на winapi? или как то форму можно сделать как в обычном проекте?
|
|||
18
Serginio1
04.05.12
✎
15:48
|
Специально посмотрел исходники и демо
там в procedure TAddinTypeInfo.InitFrom1C(const pCon: IDispatch); Var wnd: HWND; pExtWndsSupport:IExtWndsSupport; begin If Not Assigned(pConn) Then Begin pConn := pCon; PEvent := nil; IDispatch(pCon).QueryInterface(IAsyncEvent,PEvent); pExtWndsSupport := nil; IDispatch(pCon).QueryInterface(IExtWndsSupport,pExtWndsSupport); If Assigned(pExtWndsSupport) Then Begin pExtWndsSupport.GetAppMainFrame(wnd); Application.Handle := wnd; pExtWndsSupport.GetAppMDIFrame(ChildWnd); end; end; end; Form2:=TForm1.CreateParented(ChildWnd); |
|||
19
qeos
04.05.12
✎
16:23
|
(18) не чтото у меня ничго подобного даже близко.... (((
|
|||
20
Serginio1
04.05.12
✎
16:43
|
Это 7 ка. Но что то подобное должно быть и в DelphiXE2. Даже в C# можно присваивать хэндлы окон.
|
|||
21
qeos
04.05.12
✎
16:52
|
решил зайти с другой стороны.. за транслирую пример кома для С#..
|
|||
22
qeos
04.05.12
✎
17:05
|
незнаю, может ветку новую создать?
вобщем добавляю интерфейс interface IPropertyProfile : IPropertyBag но у меня нет нигде IPropertyBag т.е. как бы есть в VB но хз то или нет http://my.jetscreenshot.com/5394/20120504-5amz-39kb.jpg |
|||
23
Serginio1
04.05.12
✎
17:18
|
public interface IPropertyBag
Name: System.Windows.Forms.UnsafeNativeMethods+IPropertyBag Assembly: System.Windows.Forms, Version=4.0.0.0 |
|||
24
qeos
05.05.12
✎
11:39
|
написал набросок чтоб понятно было, что разработка в delphi отличается от примеров от 1С.
http://qeos.ru/?page=COM_napisannyi_na_DelphiXE2_dlya_1C&nav=1 пока пробую перевести пример с ИТС на дельфю. |
|||
25
Serginio1
05.05.12
✎
12:26
|
Смотри v8: А как 1С хранит числа в памяти?
При передаче через ком, число переводится в Double |
|||
26
Serginio1
05.05.12
✎
12:29
|
Так у тебя даже не Double а Single
А есть Decimal? |
|||
27
Кирпич
05.05.12
✎
12:34
|
(24) ты погоди пока статьи писать. тем, кто имеет понятие, это читать смешно, а тем кто не понимает, это читать вредно.
|
|||
28
Serginio1
05.05.12
✎
12:38
|
Попробуй TDecimal он
Тип данных OLE Automation Тип данных Delphi Примечание Decimal TDecimal 96-битное десятичное число |
|||
29
qeos
05.05.12
✎
15:21
|
(27) вот так все время и рубится.. типо вы все г.вно, а я один умный.
взял бы да помог. |
|||
30
qeos
05.05.12
✎
15:21
|
+(27) какой мануал? КАКОЙ?
|
|||
31
Кирпич
05.05.12
✎
15:24
|
Помогаю. Сначала выясни что такое интерфейс и что такое реализация интерфейса. Потом читай документрацию от 1С (на диске ИТС есть). Найди в гугле статьи по написанию внешних компонент. Потом приходи задавать вопросы.
|
|||
32
qeos
05.05.12
✎
15:31
|
facepalm
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |