Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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? Спасибо! |
|
Вернуться к началу |
|
|
FedorinoFF
Зарегистрирован: 01.02.2007 Сообщения: 272 Откуда: Санкт-Петербург
|
Добавлено: Вт Сен 02, 2008 3:53 pm Заголовок сообщения: |
|
|
а число 32767 ничего не напоминает? ну типа, макимальное значение типа smallint :-). наверное тут собака и порылась. Во внутренних процедурах, вероятно, используется smallint для нумерации элементов массива. Да и длина строки там тоже имеет такое ограничение. |
|
Вернуться к началу |
|
|
|