ВК для 1С:Предприятие 8.2 NativeAPI на Delphi (запуск приложений, раскладка клавиатуры, события и др.)

Опубликовал romix в раздел Программирование - Внешние компоненты

Внешняя компонента на основе разработки Крипича http://infostart.ru/public/81644/ - NativeAPI на Delphi реализует запуск процесса с заданным приоритетом и видимостью окна, переключение раскладки клавиатуры, всплывающие сообщения в трее, паузу sleep без загрузки процессора и внешние события.

На основе разработки участника Крипич http://infostart.ru/public/81644/ сделана компонента, которая выполняет несколько полезных действий. Исходный код, тестовая конфигурация и страница с подробным описанием приведены в комплекте. Реализует следующие методы:

ПереключитьРаскладкуКлавиатуры - позволяет программно включить требуемую языковую раскладку клавиатуры.

ЗапуститьПриложение - запускает приложение, чтобы обойти ограничения 1с. Позволяет выставить видимость окна, приоритет и процессоры.

ПоказатьСообщениеВТрее
  - показывает всплывающие сообщения в трее Windows (рядом с часами).

Сон (Sleep) - делает паузу на указанное количество миллисекунд, не нагружая процессор.

ВнешнееСобытие - инициирует внешнее событие

В шаблон _CallAsFunc и _CallAsProc и др. модуля v8napi.pas добавлена обработка исключения и добавлен параметр для вызова событий.

UPD: NativeAPI - это новая технология для внешних компонент без использования COM, которая появилась в 1С 8.2. На диске ИТС 1С выложила образец в папке VNCOMP82 только для C++ (не написали чем компилить, но методом исключения - VS 2008), участник Кирпич (см. ссылку выше) изготовил образец для Delphi, который собственно тут и применен. Список методов скорее всего будет дополняться, это первое что пришло в голову (переключатель языка клавиатуры попросили, т.к. через WScrpit.Shell не сделаешь, и с запуском внешних приложений была у коллеги проблема).

А чем может быть удобна NativeAPI для конечных пользователей и распространителей решений - COM создает известные проблемы для пользователей, у которых нет расширенных (админских) прав в системе, и соответственно компоненты то работают, то не работают, то загружаются, то не загружаются, то загружаются неизвестно откуда и т.д. В 8.2 проблемы с этим устранены путем отказа от технологии COM в пользу более традиционной технологии DLL, для которой не нужны права на запись к реестру. Также можно из браузера FF и IE (пока не проверял) эти новые компоненты вызывать.

Сам код компоненты выглядит намного яснее.

UPD2: Добавлены внешние события, тестовая конфигурация и подробное описание (readme.html) в комплекте. Страница обсуждения на форуме mista.ru: http://forum.mista.ru/topic.php?id=562506

Файлы

Наименование Файл Версия Размер Кол. Скачив.
1CNativeExec.zip
.zip 101,49Kb
08.08.11
526
.zip 101,49Kb 526 Бесплатно

См. также

Лучшие комментарии

4. DrAku1a (файл скачал) 02.08.2011 09:27
Пригодится как пример и шаблон для разработки своих ВК. Однозначно плюсую!
+ 2 [ NewLifeMan; Ksu; ]
# Ответить
7. cool.vlad4 02.08.2011 10:45
(6) Не придирайтесь, а прочитайте название "ВК для 1С:Предприятие 8.2 NativeAPI " Куда яснее уж...
# Ответить
38. Abadonna 15.06.2012 11:16
(2) CaSH_2004,
Sleep - можно делать и через вызов VBScipt

Да уж фиг нормальный слип через него сделаешь. Сам скрипт будет просто запускаться минимум миллисекунд 50-200
Пробовал я ради интереса.
Ответили: (41)
+ 2 [ DrZombi; hogik; ]
# Ответить

Комментарии

1. CaSH_2004 (файл скачал) 02.08.2011 00:27
А есть ли к ней описание методов?
# Ответить
2. CaSH_2004 (файл скачал) 02.08.2011 00:39
Скачал, описание есть. За исходники спасибо. Функционал явно бедный, Sleep - можно делать и через вызов VBScipt, балоны вызывать удобнее
ShowTray http://infostart.ru/public/20531/
Tray1C http://infostart.ru/public/18821/
MiracleV8 http://dev.1tsm.ru/project/110 - на мой взгляд самая продвинутая
а ПереключитьРаскладкуКлавиатуры и ЗапуститьПриложение для меня всегда было загадкой в 1С
Так что выглядит как перепевки уже страых решений, возможно я и не прав, если автор готов объснить для чего все это?
Ответили: (3) (5) (6) (38)
# Ответить
3. Serj1C 02.08.2011 07:10
(2) вы перечисляете ВК на старой методике. а это новая - NativeAPI (возможность использования в управляемых формах, линуксе и т.д.) // если я не ошибаюсь
# Ответить
4. DrAku1a (файл скачал) 02.08.2011 09:27
Пригодится как пример и шаблон для разработки своих ВК. Однозначно плюсую!
+ 2 [ NewLifeMan; Ksu; ]
# Ответить
5. cool.vlad4 02.08.2011 10:13
(2) послушайте 3, это native ВК - так, что не путайте, ...были у меня кое-какие дельфийские примочки,нативная работа с excel и т.д. надо будет попробовать эти ВК...
# Ответить
6. CaSH_2004 (файл скачал) 02.08.2011 10:41
Serj1C пишет:

(2) вы перечисляете ВК на старой методике. а это новая - NativeAPI (возможность использования в управляемых формах, линуксе и т.д.) // если я не ошибаюсь

Странно тогда что это нигде не отражено в описании, обращаю ваше внимание на то как это выглядит со стороны - "изобретение велосипеда", если хотите быть оригинальным хотя бы выделите то новое что вы предлагаете в своей разработке, минус не ставлю т.к. есть исходники, но оформление в целом не ахти
Ответили: (7)
− 1 [ slaviksoft; ]
# Ответить
7. cool.vlad4 02.08.2011 10:45
(6) Не придирайтесь, а прочитайте название "ВК для 1С:Предприятие 8.2 NativeAPI " Куда яснее уж...
# Ответить
8. CaSH_2004 (файл скачал) 02.08.2011 10:50
cool.vlad4,
Да не было и в мыслях, я не разработчик ВК (когда то пытался, но не впечатлило), хотя плотно ими пользуюсь, тем не менее мне ничего не говорит надпись "ВК для 1С:Предприятие 8.2 NativeAPI", кроме того что она:
1. ВК
2. для 1С 8.2
3. называется NativeAPI
А т.к. пользуюсь другими то вот и спрашиваю автора, а в чем принципиальная разница? Нигде не указано что это "проба пера" - тогда было бы ясно, так что пока очередной "велосипед"
Думаю другим также будет непонятно, так что думаю вопрос закономерен и не бесполезен
Ответили: (9) (10)
# Ответить
9. Diversus (файл скачал) 02.08.2011 11:01
(8) NativeAPI это технология внешней компоненты.
Если Вам ничего это слово не говорит, то прежде чем писать, стоит про нее узнать побольше.
Ответили: (44)
# Ответить
10. CaSH_2004 (файл скачал) 02.08.2011 11:12
Diversus пишет:
(8) NativeAPI это технология внешней компоненты.
Если Вам ничего это слово не говорит, то прежде чем писать, стоит про нее узнать побольше.

А я тут что по вашему делаю? Или мне нужно каждое незнакомое слово гуглить? в описании сложно сказать об этом или все должны догадываться? Может эта разработка только для разработчиков ВК?
Ответили: (11)
# Ответить
11. Diversus (файл скачал) 02.08.2011 11:16
(10) Ну в таком случае Вам сюда: http://v8.1c.ru/overview/Term_000000545.htm
# Ответить
12. CaSH_2004 (файл скачал) 02.08.2011 11:23
Diversus, Это уже лучше, а чем же отличается это от того что в ShowTray, Tray1C, MiracleV8? они написаны без этого?
Ответили: (13) (14)
# Ответить
13. cool.vlad4 02.08.2011 11:25
:D :cry: :o (12) берете ИТС и находите ТСВК - технология создания ВК
# Ответить
14. Diversus (файл скачал) 02.08.2011 11:38
(12) Это можете, как справедливо заметил cool.vlad4, прочитать на диске ИТС либо в интернете.
# Ответить
15. CaSH_2004 (файл скачал) 02.08.2011 12:04
Мда, получается разговор барана с воротами - непонятно кто прав, но не один не уступит. Я вам говорю про элементарные вроде вещи, что если выкладывается разработка нужно указать в чем ее преимущества/отличия перед уже имеющимися (зарекомендованными). А вы мне в ответ: разбирайся сам. Зачем тогда это все человеку который не увидел преимущества? Ведь проще использовать уже имеющееся чем перенастраивать. Как говорилось в фильме "Пароль Рыба-меч" - "Тема-то не раскрыта".
Ответили: (16)
# Ответить
16. K_A_O (файл скачал) 02.08.2011 13:09
(15) Но ведь слово NativeAPI - это и есть описание преимуществ/отличий перед уже имеющимися. Если вы не хотите посмотреть, что это такое, как угадать какие слова в описании вас устроят.
Ответили: (17)
# Ответить
17. CaSH_2004 (файл скачал) 02.08.2011 14:55
(16)Я уже давно глянул и прочитал, вот только никак не пойму каким образом незнакомое слово в названии разработки может дать понимание того что это какая то технология которую нужно найти в поисковике и прочитать про нее. Если бы так рекламировали продукты 1С, Microsoft и другие то их никто бы не знал, т.к. название ни о чем не говорит, а говорит об этом описание которого у данной обработки не наблюдается. Вот что я хотел бы сказать, но что то никто не поймет меня, может потому что все уже знают что такое NativeAPI, а я до этого не знал. Но это никак не дает понимание разработки для других "непосвященных" в создание ВК. Вообще странно отсылать к разработке ВК для того чтобы понять ее преимущества, исходя из этой логики чтобы понять что такое 1С мне нужно сначала пройти курсы бухгалтера, поработать без ПК 1-2 годика, потом пройти курсы программирования на C++, поработать программистом и только потом я вдруг пойму что такое 1С и для чего она нужна и как ее сделали. Но вроде для этого есть понятие гиперссылки которые ведут на другие ресуры с пояснениями - вот чего я хотел в описании. Вроде тривиально, ан нет...
Ответили: (18)
# Ответить
18. cool.vlad4 02.08.2011 15:02
(17) Платите автору ВК деньги как платят деньги производителям проприетарного софта (1С, микрософт) и будет вам описание и реклама...а так нахаляву, вам на блюдечке преподносят пример-шаблон ВК, будьте добры хоть посидеть, почитать, разобратся...задача программиста заключается в постановке цели и ее исследовании, и ее достижение, а не в слепом следовании пунктам чьих-то руководств...
Ответили: (19)
+ 1 [ Mopo3; ]
# Ответить
19. CaSH_2004 (файл скачал) 02.08.2011 15:17
(18)Вот так и знал, все банально сведут к деньгам. А как же куча бесплатного софта (из популярного OpenOfice.org) которое сделано вроде как (т.к. сильно не копал) нормально, и без претензий что кто-то должен заплатить. Я лично придерживаюсь правила - "если делаеш, то делай хорошо или вообще не делай". А деньги можно требовать даже за бесплатное - тут видел ссылку на прайс 1С где продается OpenOfice.org по лицензионно и за немалые деньги! Зачем мне разбираться в шаблоне? Я же не собираюсь разрабатывать ВК, я это уже писал. Как и любой программист я хотел бы получить инструмент с какой-то сжатой инструкцией в чем его особенности, а не как вы говорите "разбирайся" по куче описаний, я это делаю когда нужно вникнуть в детали. Я понимаю что это напряжно объяснить другим то до чего сам уже дошел - у 99% прогеров проблемы с документированием своего творчества. Именно поэтому зарабатывают продажники, а программисты кодят. Когда совмещается обе стороны это БОМБА!
ИМХО: выкидывать головоломки чтобы другие разбирались это, помоему, говорит только о непрофессионализме и неуважении к времени других.
ЗЫ: реклама в данном контексте=описание, не надо цеплятся за слова.
Ответили: (20) (32) (35)
− 1 [ tango; ]
# Ответить
20. cool.vlad4 02.08.2011 15:30
(19) Вы серьезно? Не потроллить? КАКАЯ нафиг документация, два с половиной метода, в описании все есть, сделано явно как пример для обучения, тем, кто будет разрабатывать ВК, но вы не собираетесь ни вникать, ни разрабатывать, так, что проходите мимо.
Ответили: (21)
# Ответить
21. CaSH_2004 (файл скачал) 02.08.2011 15:42
(20)Не надо так наезжать. Где это вам удалось увидеть у меня слово "документация"? Я сказал вцелом документирование, а не применительно к данному случаю. В данном случае я думаю всем пользователям разработки будет полезно знать в чем ее преимущество перед уже имеющимися. Если это просто пример разработки то где это написано? Или это рабочий вариант? Я уже начинаюсь сомневаться что оно вообще работает раз тут столько говорят про разработку, а не про использование. Про личные догадки не надо говорить, т.к. выводы каждого инивидума его личные проблемы. Выходит разработка относится к категории "разберись сам и пойми нужно ли оно тебе". Очень занятный подход.
# Ответить
22. CaSH_2004 (файл скачал) 03.08.2011 11:57
Спасибо romix за реакцию на просьбы пользователей!
Ответили: (23)
# Ответить
23. nicxxx (файл скачал) 09.08.2011 05:47
проверка
# Ответить
24. I_G_O_R 11.08.2011 23:13
25. Собеседник 12.08.2011 00:19
много флуда.

вещь нужная - спс

а перехват нажатий клавиш (чтоб потом вызвать событие) буит?
# Ответить
26. pulpik 21.09.2011 14:00
платформа 8.2.14.533
использую описанный на ИТС от 1С метод загрузки из конфигурации (из макета с двоичными данными)
создал архив из dll + файл манифест xml
<?xml version="1.0" encoding="utf-8"?>
<bundle xmlns="http://v8.1c.ru/8.2/addin/bundle">
<component os="Windows" path="exec82.dll" type="native" arch="i386" />
<component os="Windows" path="exec82.dll" type="native" arch="x86_64" />
</bundle>
установка и подключение проходят без ошибок, но при создании объекта ОбъектВК = Новый("AddIn.DemoLib.ExecExtention"); выдает ошибку "тип не определен"
Не подскажите в чем ошибка
# Ответить
27. pulpik 21.09.2011 14:21
pulpik пишет:

платформа 8.2.14.533

использую описанный на ИТС от 1С метод загрузки из конфигурации (из макета с двоичными данными)

создал архив из dll + файл манифест xml

<?xml version="1.0" encoding="utf-8"?>



<component os="Windows" path="exec82.dll" type="native" arch="i386" />

<component os="Windows" path="exec82.dll" type="native" arch="x86_64" />



установка и подключение проходят без ошибок, но при создании объекта ОбъектВК = Новый("AddIn.DemoLib.ExecExtention"); выдает ошибку "тип не определен"

Не подскажите в чем ошибка



вопрос снят, разобрался.
# Ответить
28. pulpik 21.09.2011 16:45
а как можно изменить иконку появления в трее?
# Ответить
29. zahar33 17.10.2011 18:12
Подскажите наилучший вариант кода , чтоб отловить событие нажатия клавиш "+++" на Delfi для этой компонеты
# Ответить
30. zahar33 17.10.2011 18:13
Если, конечно, это возможно
# Ответить
31. mur611 25.10.2011 14:12
Здравствуйте, сложно данный пример переделать для работы с COM портами? если все функции и процедуры готовые есть, правда из СОМ объекта. и где нужно вставлять данные функции и процедуры?
Ответили: (34)
# Ответить
32. slaviksoft (файл скачал) 23.01.2012 17:11
(19) CaSH_2004,

ну про барана тут все понятно :-)
# Ответить
33. slaviksoft (файл скачал) 23.01.2012 17:15
спасибо за пример.
есть вопрос.

когда мы вызываем насильственно ошибку Raise Exception.Create('Ошибка записи в порт');
она обрабатывается и вызывается процедура: addError(1006, 'Внешняя компонента', pWideChar(err), E_FAIL);

она, как я понял напрямую выводит сообщение в окно сообщений 1С.
можно ли сделать так что-бы описание ошибки попадало в 1с-методы "ИнформацияОбОшибке()" или "ОписаниеОшибки()"?
# Ответить
34. slaviksoft (файл скачал) 23.01.2012 17:20
(31) mur611,
TMyClass = class(TV8UserObject)
private
p_Port: BYTE;
p_BaudRate: DWORD;
p_ByteSize: BYTE;
p_Parity: BYTE;
p_StopBits: BYTE;
p_ReadIntervalTimeout: DWORD;
p_ReadTotalTimeoutMultiplier: DWORD;
p_ReadTotalTimeoutConstant: DWORD;
p_WriteTotalTimeoutMultiplier: DWORD;
p_WriteTotalTimeoutConstant: DWORD;
p_CRC16: boolean; //контролировать crc
p_TimeOut: cardinal; //максимальное время ожидания ответа

readBuffer: string; //буфер для считанных символов
hCom: DWORD; //дескриптор Com-порта
dcb: TDCB; //uses Windows
cto: TCommTimeOuts; //uses Windows
bPortIsOpen: Boolean; //признак открытия порта
setingCRC:boolean;

BufferIsEmpty: Boolean;
timer:TTimer;
lastCommand:WideString;

function ReadString(var crc16:WORD):string;
procedure WriteString(buff:string);
function WaitForReady(ExternalEvent:boolean):WideString;

public
procedure AddReadData(Sender: TObject);

//функции
function SleepFunc(RetValue: PV8Variant; Params: PV8ParamArray; const ParamCount: integer; var v8:TV8AddInDefBase): boolean;
function CreateEventFunc(RetValue: PV8Variant; Params: PV8ParamArray; const ParamCount: integer; var v8:TV8AddInDefBase): boolean;
function OpenPort(RetValue: PV8Variant; Params: PV8ParamArray; const ParamCount: integer; var v8:TV8AddInDefBase): boolean;
function ClosePort(RetValue: PV8Variant; Params: PV8ParamArray; const ParamCount: integer; var v8:TV8AddInDefBase): boolean;
function Send(RetValue: PV8Variant; Params: PV8ParamArray; const ParamCount: integer; var v8:TV8AddInDefBase): boolean;
function SendAndWait(RetValue: PV8Variant; Params: PV8ParamArray; const ParamCount: integer; var v8:TV8AddInDefBase): boolean;
function SetCRC16Control(RetValue: PV8Variant; Params: PV8ParamArray; const ParamCount: integer; var v8:TV8AddInDefBase): boolean;

//свойства
function Property_Port_GetSet(propValue: PV8Variant; Get: boolean; var v8:TV8AddInDefBase): boolean;
function Property_BaudRate_GetSet(propValue: PV8Variant; Get: boolean; var v8:TV8AddInDefBase): boolean;
function Property_ByteSize_GetSet(propValue: PV8Variant; Get: boolean; var v8:TV8AddInDefBase): boolean;
function Property_Parity_GetSet(propValue: PV8Variant; Get: boolean; var v8:TV8AddInDefBase): boolean;
function Property_StopBits_GetSet(propValue: PV8Variant; Get: boolean; var v8:TV8AddInDefBase): boolean;
function Property_ReadIntervalTimeout_GetSet(propValue: PV8Variant; Get: boolean; var v8:TV8AddInDefBase): boolean;
function Property_ReadTotalTimeoutMultiplier_GetSet(propValue: PV8Variant; Get: boolean; var v8:TV8AddInDefBase): boolean;
function Property_ReadTotalTimeoutConstant_GetSet(propValue: PV8Variant; Get: boolean; var v8:TV8AddInDefBase): boolean;
function Property_WriteTotalTimeoutMultiplier_GetSet(propValue: PV8Variant; Get: boolean; var v8:TV8AddInDefBase): boolean;
function Property_WriteTotalTimeoutConstant_GetSet(propValue: PV8Variant; Get: boolean; var v8:TV8AddInDefBase): boolean;

function Property_CRC16_GetSet(propValue: PV8Variant; Get: boolean; var v8:TV8AddInDefBase): boolean;
function Property_TimeOut_GetSet(propValue: PV8Variant; Get: boolean; var v8:TV8AddInDefBase): boolean;
function Property_Opened_GetSet(propValue: PV8Variant; Get: boolean; var v8:TV8AddInDefBase): boolean;

procedure done; override;
constructor Create; override;
//destructor Destroy; override;
end;
# Ответить
35. tango 23.01.2012 21:08
(19) минус за "о непрофессионализме и неуважении" - по отношению к автору публикации это ваще не гуд
# Ответить
36. gavrikprog 03.03.2012 00:37
Почитал достаточно всего, инет порыл.
Вопрос остался без ответа(ибо уровень ввода в тему все равно на уровне 0 почти).

Есть ли возможность манипулировать данными базы 1С из внешней компоненты(не создавая OLE или Com соединение специально в компоненте).
К примеру в документе есть реквизит Сумма, нажали команду Изменить компоненты Native API и у нас выполнилась процедура, кот. без возвращаемых значений изменила значение этого реквизита ?

Или к примеру выполнить функцию общего модуля 1С
/***********************
Прошел еще раз документацию/

Правильно я понял, что это возможно только в COM-компонентах ?
# Ответить
37. antoni 10.03.2012 23:52
спасибо автору за пример,
но такой вопрос, как запустить такую компоненту на 64х сервере?
пробовал перекомпилировать dll, приложение падает при выполнении ПодключитьВнешнююКомпоненту.
# Ответить
38. Abadonna 15.06.2012 11:16
(2) CaSH_2004,
Sleep - можно делать и через вызов VBScipt

Да уж фиг нормальный слип через него сделаешь. Сам скрипт будет просто запускаться минимум миллисекунд 50-200
Пробовал я ради интереса.
Ответили: (41)
+ 2 [ DrZombi; hogik; ]
# Ответить
39. phabi0z 14.08.2012 17:48
Присоединяюсь к antoni

Компилирую для x64 и сервер падает при вызове ПодключитьВнешнююКомпоненту
Может быть нужно что-нибудь в manifest.xml подправить

Нужно написать ВК для 64 сервера.
Кто сталкивался - отзовитесь...
# Ответить
40. vladon 25.09.2012 13:44
Проблема с x64 явно в стандартах вызова (stdcall), если убрать stdcall из процедуры _Init, то падает и на win32.

Сделал полный лог каждой строчки, так вот на win64 тормозится перед _Init.

Что делать - пока ума не приложу, кто сталкивался?
# Ответить
41. DrZombi (файл скачал) 08.09.2014 07:50
(38) Если пойти дальше, то Пауза на сервере через Джаву вообще не отработает по политике безопасности :)
Что не говори, но если есть возможность написать паузу через ВК, что в тонком клиенте это лучше не упустить :)
# Ответить
42. uvsd2014 (файл скачал) 18.02.2015 10:32
спасибо, хорошая программа.
# Ответить
43. capitan 27.03.2015 16:39
Спасибо, то что нужно для быстрого старта.
# Ответить
44. Alien_job (файл скачал) 08.05.2015 14:28
8.3.5.1570 при запуске тестовой базы вываливается с ошибкой {МодульУправляемогоПриложения(9)}: Тип не определен (AddIn.DemoLib.ExecExtention)
# Ответить
45. frkbvfnjh (файл скачал) 24.07.2015 17:17
Спасибо автору! Исходник очень помог, но как мне задать для некоторых функций значения по умолчанию? В исходнике Крипича есть такой пример, но при вызове функций без параметров 1С завершает работу с ошибкой... Сделал в Вашем исходнике как в примере у Кирпича:
with AddFunc('ExternalEvent', 'ВнешнееСобытие', @TMyClass.CreateEventFunc, 3) do
    begin
        DefParams.AddWString('Первый Параметр', 0);
        DefParams.AddWString('Второй Параметр', 1);
        DefParams.AddWString('Первый Параметр', 2);
    end;
...Показать Скрыть

Тоже вылетает, что ожидаемо... Нумерацию с 1-це тоже делал - не помогает. Было бы хорошо если бы в пример включили пример вызова с параметрами по умолчанию. Кстати в 1С вызываю так:
ОбъектВК.ВнешнееСобытие(, , );
# Ответить
46. frkbvfnjh (файл скачал) 24.07.2015 17:19
Что бы было понятней о каком участке кода идет речь:
begin
  with ClassRegList.RegisterClass(TMyClass, 'ExecExtention', 'TMyClass') do
  begin
    AddFunc('RunApp', 'ЗапуститьПриложение', @TMyClass.ExecFunc, 3);
    AddFunc('Sleep', 'Сон', @TMyClass.SleepFunc, 1);
    AddFunc('ActivateKeyboardLayout', 'ПереключитьРаскладкуКлавиатуры', @TMyClass.ActivateKeyboardLayoutFunc, 1);
    AddFunc('ShowBalloon', 'ПоказатьСообщениеВТрее', @TMyClass.ShowBalloonFunc, 3);
    with AddFunc('ExternalEvent', 'ВнешнееСобытие', @TMyClass.CreateEventFunc, 3) do
    begin
        DefParams.AddWString('Первый Параметр', 0);
        DefParams.AddWString('Второй Параметр', 1);
        DefParams.AddWString('Первый Параметр', 2);
    end;
    //AddFunc('ExternalEvent', 'ВнешнееСобытие', @TMyClass.CreateEventFunc, 3);
    AddFunc('SetStatusLine', 'УстановкаСтатуснойСтроки', @TMyClass.SetStatusLineFunc, 1);

    AddProp('Visible','Видимость',True,True, @TMyClass.PropertyVisibleGetSet);
    AddProp('Priority','Приоритет',True,True, @TMyClass.PropertyPriorityGetSet);
    AddProp('Processors','Процессоры',True,True, @TMyClass.PropertyProcessorsGetSet);
    AddProp('EventBufferDepth','ГлубинаБуфераСобытий',True,True, @TMyClass.PropertyEventBufferDepthGetSet);
  end;


end.
...Показать Скрыть
# Ответить
47. premier 31.07.2015 23:39
Ребята, а что же человеку (CaSH_2004) никто так и не объяснил, в чём отличие NatveAPI компонент от COM? Там же всё просто - в NativeAPI кроссплатформенность достигается зп счет отказа от COM технологий.
COM, он же ActiveX, он же OLE - это одна и та же технология, построенная на использовании так называемых интерфейсов. Ну а поскольку эта технология (COM) - разработка компании Microsoft, то и работать она будет только под управлением OS Windows!.
NaitiveAPI не позволяет использовать интерфейсы, поэтому и кроссплатформенная, и будет работать под всеми OS.
Ну и минусы: все объекты ссылочного типа в 1С - это COM объекты. Поэтому из компонент, созданных по технологии NativeAPI в них попросту нельзя будет использовать.
Какую технологию написания внешней компоненты использовать зависит только от того, будет ли компонента работать с объектами 1С ссылочного типа или нет. Если да - несомненно COM, иначе - NativeAPI (поскольку кроссплатформенная).
Кстати, прикольно, 1С в примерах ВК по технологии NativeAPI тоже использует терминологию интерфесов. Только их там нет. Есть указатели на классы и куча подключаемых библиотек, которые, если писать по технологии СОМ, уже входят в поставку операционной системы (если, конечно писать на "чистом" С или С++ без использования фрэймворков).
Поздно посмотрел на дату публикации ))) Полчаса коту под хвост )))
# Ответить
48. vla.dik67 (файл скачал) 30.05.2016 13:34
Добрый день!
Подскажите, пожалуйста, почему в Lazarus не работает AllocMemory?
Вот код:

function _V8String(V8MM: TV8MemoryManager; W: WideString): PWideChar;
var
  L: longword;
begin
  result := nil;
  if Pointer(V8MM) = nil then
    Log('  _V8String: Pointer(V8MM) = nil')
  else
    begin
      L := Length(W);
      L := L + L + 2;
      if V8MM.AllocMemory(@result, L) then
        begin
          if Pointer(result) = nil then
            Log('_V8String:  result = nil !!!')
          else
            Move(W[1], result^, L);
        end
      else
        Log('_V8String:  NO AllocMemory !!!')
    end;
end;
...Показать Скрыть


Переменная result - всегда равна nil после вызова V8MM.AllocMemory(@result, L).
Такое ощущение, что AllocMemory не вызывается.

Последовательность вызовов такая:
_Init
_setMemManager
_SetLocale
_GetInfo
_RegisterExtensionAs
_V8String: result = nil !!!

В Turbo Delphi Explorer всё нормально работает.

Версия Lazarus - 1.6
Версия 1С - 8.3.7.1917
Windows 7 Pro 32 bit
Файлы проекта во вложении.

Спасибо.

Прикрепленные файлы:

1CNativeHello.zip
# Ответить
49. vla.dik67 (файл скачал) 30.05.2016 13:34
Добрый день!
Подскажите, пожалуйста, почему в Lazarus не работает AllocMemory?
Вот код:

function _V8String(V8MM: TV8MemoryManager; W: WideString): PWideChar;
var
  L: longword;
begin
  result := nil;
  if Pointer(V8MM) = nil then
    Log('  _V8String: Pointer(V8MM) = nil')
  else
    begin
      L := Length(W);
      L := L + L + 2;
      if V8MM.AllocMemory(@result, L) then
        begin
          if Pointer(result) = nil then
            Log('_V8String:  result = nil !!!')
          else
            Move(W[1], result^, L);
        end
      else
        Log('_V8String:  NO AllocMemory !!!')
    end;
end;
...Показать Скрыть


Переменная result - всегда равна nil после вызова V8MM.AllocMemory(@result, L).
Такое ощущение, что AllocMemory не вызывается.

Последовательность вызовов такая:
_Init
_setMemManager
_SetLocale
_GetInfo
_RegisterExtensionAs
_V8String: result = nil !!!

В Turbo Delphi Explorer всё нормально работает.

Версия Lazarus - 1.6
Версия 1С - 8.3.7.1917
Windows 7 Pro 32 bit
Файлы проекта во вложении.

Спасибо.

Прикрепленные файлы:

1CNativeHello.zip
# Ответить
Внимание! За постинг в данном форуме $m не начисляются.
Внимание! Для написания сообщения необходимо авторизоваться
Текст сообщения*
Прикрепить файл






IE 2016