Ситуация такая, в программу встраивается карта MapInfo через OLE, в Delphi код компилируется без проблем, а вот с Lazarus проблема:
MI.Do('какая нибудь команда MapBasic, неважно');
Fatal: Syntax error, "identifier" expected but "DO" found
Переменная MI типа Variant, соединение с MapInfo происходит.
Через метод Do отправляются в MapInfo команды, есть другой метод Eval, если нужен ответ от MapInfo, он работает.
А метод Do при компиляции определяется как родной FPC и возникает ошибка.
Как можно это обойти?
MapInfo OLE
Модератор: Модераторы
-
Павел Ишенин
- постоялец
- Сообщения: 475
- Зарегистрирован: 24.03.2007 09:16:52
написать о проблеме в bug tracker проекта fpc
Может кому нибудь пригодится решение данной проблемы, хоть и кривым путем.
Написал я об этой проблеме в bug tracker проекта fpc, и получил очень не радостный ответ о том что бы профиксить эту проблему, FPC придется перелапачивать целиком, т.е. решение поблемы не стоит.
Так вот как я решил поступить:
Procedure MB(V:Variant;S:WideString);
Begin
V.ZZ(S);
End;
Процедура предназначенная для выполнения комманды MapBasic - S, в MapInfo - V. ZZ это на самом деле DO, но для удачной компиляции написал пока что так, в программе везде заменил V.DO('Чего нибудь') на MB(V,'Чего нибудь'). После удачного получения .EXE файла, я взял FAR и просто по F4 нашел в .EXE - ZZ, там рядом куча строковых констант, и заменил на DO.
И все работает нормально.
Можно в принципе и DLL'ку сделать на будущее.
Написал я об этой проблеме в bug tracker проекта fpc, и получил очень не радостный ответ о том что бы профиксить эту проблему, FPC придется перелапачивать целиком, т.е. решение поблемы не стоит.
Так вот как я решил поступить:
Procedure MB(V:Variant;S:WideString);
Begin
V.ZZ(S);
End;
Процедура предназначенная для выполнения комманды MapBasic - S, в MapInfo - V. ZZ это на самом деле DO, но для удачной компиляции написал пока что так, в программе везде заменил V.DO('Чего нибудь') на MB(V,'Чего нибудь'). После удачного получения .EXE файла, я взял FAR и просто по F4 нашел в .EXE - ZZ, там рядом куча строковых констант, и заменил на DO.
И все работает нормально.
Можно в принципе и DLL'ку сделать на будущее.
