Передача параметров из VIP в dll на С++.

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
lStep
Новичок
Сообщения: 28
Зарегистрирован: 27 июл 2006, 16:49

Передача параметров из VIP в dll на С++.

Сообщение lStep »

Добрый день.
Проблема передача параметра-строки из VIP в dll сделаной на С++.
Как нужно объявить функцию для dll, написанной и скомпилированной на MS VC++, для дальнейшего использования данной функции (из dll) в VIP.

Столкнулись со следующей проблемой, вместо строки в функцию передается мусор (из VIP в dll), как это можно побороть?
пример того, что не работает:

Код: Выделить всё

                 ULONG  HelloGalaxyA(LPCSTR string)

                {

                ::MessageBoxA(NULL,  string , "HelloGalaxyA", 

                                                                                                              MB_OK|MB_ICONINFORMATION);

                               return 0;

                }

[b]в VIP:[/b]
function XML4GalaxyA2(var string) : word; external 'XMLDoc4Galaxy.dll#HelloGalaxyA';

edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Передача параметров из VIP в dll на С++.

Сообщение edward_K »

интересно что передаете и что получаете.
Типы переменных у вас точно не совпадают.
В функции вроде обычный string, а в объявлении ссылка. Попробуйте убрать var.
lStep
Новичок
Сообщения: 28
Зарегистрирован: 27 июл 2006, 16:49

Re: Передача параметров из VIP в dll на С++.

Сообщение lStep »

Я не настаиваю, что тут всё идеально.
Перебрали кучу вариантов и с "Var" и без "VAR"
VIP не всякое пропускает. Ругается:

Код: Выделить всё

   │  Ошибка: Повторная перерегистрация функции не совпадает с используемой
Передаём строку "12345qwert" ,а из функции в ответ что-то типа ",}<"
ни длина ни содержание не совпадает.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Передача параметров из VIP в dll на С++.

Сообщение edward_K »

ну на с не писал, а на делфи требуется чтобы функция была обозвана в верхнем регистре.
типа так

Код: Выделить всё

exports
   ToTable_Init  name 'TOTABLE_INIT' // 1

и стандарт объявления для vip

Код: Выделить всё

Function  FpUnPackComp         (String)                      : Comp;    external 'FpServ.dll';
После изменения не пробовали удалить res, atlantis.res?
KATZ
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49

Re: Передача параметров из VIP в dll на С++.

Сообщение KATZ »

Вопрос уже обсуждался. Компилировать DLL надо борландовским компилятором, потому что в "Галактике" используется борландовский fastcall, компиляторы от MS такой способ передачи параметров не поддерживают.
Справка по соглашениям о вызове.
n0where
Местный житель
Сообщения: 499
Зарегистрирован: 30 дек 2010, 08:16

Re: Передача параметров из VIP в dll на С++.

Сообщение n0where »

И правильнее в ДЛЛ тип
array[1..255] of char
хороший программист — это человек, который переходя улицу с односторонним движением смотрит в обе стороны
Ответить