www.map-info.ru :: Просмотр темы - массивы в MI
                               РќР° главную страницу сайта

 
                                
ВходВход    РегистрацияРегистрация    ПрофильПрофиль    ПользователиПользователи    ГруппыГруппы    FAQFAQ    ПоискПоиск  

 
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Предыдущая тема :: Следующая тема  
Автор Сообщение
doctor



Зарегистрирован: 11.05.2008
Сообщения: 2

СообщениеДобавлено: Вс Май 11, 2008 1:03 pm    Заголовок сообщения: массивы в MI Добавить ответ со ссылкой на данный текст

подскажите пожалуйста.
мы написали dll-ку на С++, и подключили ее в программе MapBasic. она работает с базамаи данных MySQL. Сможем ли мы вызывать функции этой библиотеки с параметрами, которые служат для выборки данных из таблиц БД, а результатом этих функций получать достаточно большой массив числового типа? Без создания промежуточных файлов и таблиц.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
dimaz



Зарегистрирован: 09.07.2007
Сообщения: 8

СообщениеДобавлено: Чт Май 15, 2008 6:17 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Можно передать в функцию dll массив простого типа. В dll нужно объявить этот параметр как статический массив, отключив при этом range check в опциях компилятора. Передаем по ссылке, конечно.
Я всегда выделял память под массив в MapBasic. Можно ли выделить ее в C++, чтобы отдать потом в MapBasic, я не знаю, врать не буду. Но я бы даже не стал пытаться, проблем наверное не оберешься.
Можно сделать так:
Вызываем функцию 1 dll с параметрами запроса, получаем результаты, сохраняем их в глобальном массиве dll и возвращаем размер массива.
Выделяем память под массив и вызываем функцию 2 dll, а она из глобального массива dll копирует результаты запроса в массив, созданный в MapBasic.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
chessplayer



Зарегистрирован: 01.03.2008
Сообщения: 10

СообщениеДобавлено: Пн Авг 18, 2008 7:18 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Показательный пример dll (C++) и MapBasic.

Код в dll (С++):
extern "C" __declspec(dllexport) int func(int mass[10])
{
for(int i=0;i<10;i++) mass[i]=i;
return 0;
}

Код в MapBasic (вызов dll):
...
Declare Function func Lib "dlltest.dll" (mass(10) as Integer) As Integer
mass(10) as Integer

sub main
per=func(mass)
end sub

В результате в массив mass из кода MapBasic будут записаны числа от 0 до 9.

К сожалению, параметром функции в MapBasic не может быть массив, состоящий из более 32767 элементов. Кому-нибудь известно, с чем связано данное ограничение? Можно ли обойти данный недостаток в MapBasic? Спасибо!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
FedorinoFF



Зарегистрирован: 01.02.2007
Сообщения: 272
Откуда: Санкт-Петербург

СообщениеДобавлено: Вт Сен 02, 2008 3:53 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

а число 32767 ничего не напоминает? ну типа, макимальное значение типа smallint :-). наверное тут собака и порылась. Во внутренних процедурах, вероятно, используется smallint для нумерации элементов массива. Да и длина строки там тоже имеет такое ограничение.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Top.Mail.Ru