Зарезервированное слово- type

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Зарезервированное слово- type

Сообщение pi1 » 13.05.2015 14:06:41

Решил использовать PrintScalesDriver от КАС - центра (электронные весы фирмы CAS).
Все как обычно, берем пример из другой среды:
//..............................
Пример работы с драйвером весов
// Создаем объект
Scale scale = создать СОМОбъект “CAScentre_DLL_printScale.Scale”;
Попытка
//Задаем основные настройки драйвера для работы с весами
scale.IP=”127.0.0.1”;
scale.Port=20304;
scale.Type = 3;
//Подключаемся к весам
scale.Open
//..............................
поправляем синтаксис и можно использовать (много раз так делал), но вот тут имя поля объекта, type, не проходит проверку на синтаксис в Lazarus.
Как обойти и можно ли вообще обойти? Не хотелось бы до батников опускаться.
Аватара пользователя
pi1
новенький
 
Сообщения: 59
Зарегистрирован: 19.04.2012 18:11:24
Откуда: г.Зеленокумск

Re: Зарезервированное слово- type

Сообщение скалогрыз » 13.05.2015 16:40:33

можно так попробовать:
Код: Выделить всё
scale.&Port := 20304


но вообще, проблем с зарезервированными словами и КОМ-объектами в паскале быть не должно.
Потому что КОМ интерфейсы работают не на основе названия метода, а только на основе порядка, т.е. интерфейс может быть описан как
Код: Выделить всё
  CAScentre_DLL_PrintScale = IInterface
  public
    function getPort(aport: Integer): Integer;
    procedure setPort(aport: Integer);
    property _Port: Integer read getPort write setPort;
  end;

и никаких проблем вознинуть не должно.
Код: Выделить всё
  scale._Port := 20304
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Зарезервированное слово- type

Сообщение pi1 » 16.05.2015 22:10:44

Теоритически я согласен, но вот на практике IDE Lazarus не пропускает синтаксис этого куска кода - scale.Type = 3;
Потому как в нем используется слово -Type. В более новых редакциях этого софта от CAS имя поля исправлено на type_ , но одновременно с этим разработчик придумал бюрократическую процедуру по активации, регистрации и т.п. . Наверное вместо весов будут теперь софт продавать :wink:
Аватара пользователя
pi1
новенький
 
Сообщения: 59
Зарегистрирован: 19.04.2012 18:11:24
Откуда: г.Зеленокумск

Re: Зарезервированное слово- type

Сообщение скалогрыз » 17.05.2015 06:29:37

я теперь понимаю своё непонимание!
а можно ли пример кода на паскале увидеть? а то выше приведённый пример из батника.
особенно интересует объявление типа Scale
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Зарезервированное слово- type

Сообщение SSerge » 17.05.2015 10:18:57

скалогрыз писал(а):особенно интересует объявление типа Scale


Type Scale:OleVariant или как то так. Это же COM объект; нет для него объявления как такового
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Зарезервированное слово- type

Сообщение kazalex » 17.05.2015 12:08:29

pi1 писал(а):IDE Lazarus не пропускает синтаксис этого куска кода - scale.Type = 3;
Потому как в нем используется слово -Type.

Ну а так:
Код: Выделить всё
scale.&Type := 3;
kazalex
постоялец
 
Сообщения: 296
Зарегистрирован: 01.06.2012 14:54:10

Re: Зарезервированное слово- type

Сообщение скалогрыз » 17.05.2015 17:27:36

kazalex писал(а):Ну а так:
Код: Выделить всё
scale.&Type := 3;


хм... почему когда я советовал использовать & я указал на port вместо type? наверное я был пьян! :mrgreen:

SSerge писал(а):Type Scale:OleVariant или как то так. Это же COM объект; нет для него объявления как такового

А если быть точнее то Automation COM объект, с поддержкой IDispatch интерфейса. ("особая магия" по вызову метода без его определения, работает на основе информации о методе информации полученной через IDispatch)
А значит объявление такое "существует", просто поставщики библиотеки поленились сделать его для delphi?!
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Зарезервированное слово- type

Сообщение SSerge » 18.05.2015 05:53:47

скалогрыз писал(а):с поддержкой IDispatch интерфейса


Тут, видишь ли, при явном определении "заголовочного файла" в виде IDispatch, появляется такая хрень, как CLID COM-объекта. И программа, благополучно отлаженная и работающая, при другой инсталляции может этого COM-объекта не найти, в случае даже небольшого изменения версии программы, которая должна вызываться через COM. В частности, если есть компонент например управления Excel"м скажем 2003-м, построенный на базе IDIspatch, то он в упор не видит Excel любой другой версии - зато в редакторе все свойства доступны. В противоположность получения Variant через GetOleObject (могу нещадно путать названия ф-й) - программист не видит при кодировании ни одного свойства (их надо знать, как и порядок и назначения параметров), зато вызывается любой (первый попавшийся) инсталлированный Excel.
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Зарезервированное слово- type

Сообщение скалогрыз » 18.05.2015 16:05:28

SSerge писал(а):Тут, видишь ли, при явном определении "заголовочного файла" в виде IDispatch, появляется такая хрень, как CLID COM-объекта.

и ведь действительно, использование только IDispatch помогает с совместимостью между разными версиями.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Зарезервированное слово- type

Сообщение pi1 » 25.05.2015 23:18:42

Конкретно это выглядит так:
procedure Tf_fasovka.SpeedButton12Click(Sender: TObject);
var
scale:OleVariant;
begin
{
Сэмпл от разработчика-
Пример работы с драйвером весов
// Создаем объект
Scale scale = создать СОМОбъект “CAScentre_DLL_printScale.Scale”;
Попытка
//Задаем основные настройки драйвера для работы с весами
scale.IP=”127.0.0.1”;
scale.Port=20304;
scale.Type = 3;
//Подключаемся к весам
scale.Open
работает во многих средах кроме паскаля,
наверняка нужно просто отключить проверку синтаксиса перед компиляцией
}
try
// Создаем объект для Tandem7PI
scale :=createoleobject('CAScentre_DLL_printScale.Scale');
//Задаем основные настройки драйвера для работы с весами
scale.IP:='127.0.0.1';
scale.Port:=20304;
scale.Type := 3;
//Подключаемся к весам
scale.Open;
//тут работа с полями и методами объекта
scale.close;
except
end;
end;

Простой вопрос, как отключить проверку синтаксиса части кода в IDE Lazarus ?
scale.&Type = 3; - не прошло
Аватара пользователя
pi1
новенький
 
Сообщения: 59
Зарегистрирован: 19.04.2012 18:11:24
Откуда: г.Зеленокумск

Re: Зарезервированное слово- type

Сообщение скалогрыз » 26.05.2015 01:01:50

pi1 писал(а):Простой вопрос, как отключить проверку синтаксиса части кода в IDE Lazarus ?
scale.&Type = 3; - не прошло

а если не прошло, то с какой ошибкой?

например такой вот тест:
Код: Выделить всё
program project1;
{$mode delphi}
var
  o : OleVariant;
begin
  o.&Type := 3;
end.

компилируется без проблем, а ассебмлерный листинг показывает что всё должно быть правильным:
Код: Выделить всё
...
# [6] o.&Type := 3;
   leal   -4(%ebp),%eax
   movl   $3,(%eax)
   leal   -4(%ebp),%eax
   pushl   %eax
   movl   $_$PROJECT1$_Ld1,%ecx
   movl   $U_P$PROJECT1_O,%edx
   movl   $0,%eax
   call   fpc_dispinvoke_variant
..
.globl   _$PROJECT1$_Ld1
_$PROJECT1$_Ld1:
   .byte   4,1,0,16,84,121,112,101,0

84,121,112,101 - и есть "Type", а не "&Type"
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Зарезервированное слово- type

Сообщение pi1 » 27.05.2015 15:56:46

Респект и уважуха за подсказку scale.&type. Теперь нужно в поле scale.pluName1 скормить OLE char строку. Еще этот тип называют bstr. В префиксе идет описание длины строковой части. Не подскажите?

Добавлено спустя 59 минут 44 секунды:
Похоже нашел !
===================
Answer

by:simonetPosted on 1999-05-15 at 22:23:18ID: 1374599

Use StringToWideChar to convert A (type string) to a TBstr (type PWideString).

This way you can do:

var
a : string;
c : Variant;
pws : PWideString;
begin
a := 'The quick brown fox jumped from the bridge.';
GetMem(pws, 1024); // Remove this if it fails.. haven't tried
C := View.CreateConcept(StringToWideChar(a, pws, lenght(a), ' '); // remove this if you remove GetMem
FreeMem(pws);
(...)

Yours,

Alex
================================
Аватара пользователя
pi1
новенький
 
Сообщения: 59
Зарегистрирован: 19.04.2012 18:11:24
Откуда: г.Зеленокумск

Re: Зарезервированное слово- type

Сообщение Vapaamies » 27.05.2015 18:15:48

На самом деле WideString -- это и есть OLE-строка. По крайней мере, в Delphi. Ее нужно приводить к Pointer и передавать туда, где требуется BSTR.
Аватара пользователя
Vapaamies
постоялец
 
Сообщения: 292
Зарегистрирован: 24.07.2012 22:37:59
Откуда: Санкт-Петербург


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 225

Рейтинг@Mail.ru