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

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

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



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

СообщениеДобавлено: Пт Авг 01, 2008 8:46 pm    Заголовок сообщения: Передача массива в DLL и обратно Добавить ответ со ссылкой на данный текст

Может, кто-нибудь подскажет. Пишу ДЛЛ на Дельфи, в нее надо передать массив, допустим, целых чисел, обработать его и вернуть полученные данные. Если речь идет не о массиве - работает без проблем; с массивом - при вызове функции MapInfo вылетает с сообщением "Системная ошибка 10003".
Кто-нибудь сталкивался? В документации этот раздел освещен очень слабо :(

На Дельфи объявляю функцию примерно так:
function FunctionName (var ArrayName : array of integer) : integer; export; stdcall;

На MapBasic объявляю так:
Declare Function FunctionName Lib "DLLName.dll" (ArrayName() As integer) As integer
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Андрей Могильный



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

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

Думаю, так не получится. Массив в Дельфи и массив в MapBasic - это разные типы данных с точки зрения их реализации. Самый простой и тупой подход - зашить массив в строку, типа:
1;2;4;5;76;7;8
передать в Дельфи и там разобрать.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Jim Jam



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

СообщениеДобавлено: Ср Авг 06, 2008 7:48 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Это, конечно, тоже вариант, но как в таком случае бороться с ограничением 255 символов?

Кстати, насчет различной реализации типов данных в Дельфи и МапБейсике - не факт. Я не уточнил, но в ДДЛ-ку массив передается корректно, с этим проблем нет. А вот обратно не вовращается :( Если бы различие было бы принципиальным, то и библиотека бы не работала, мне кажется
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Андрей Могильный



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

СообщениеДобавлено: Ср Авг 06, 2008 10:21 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

А где это ограничение в 255 символов? В Дельфи - там вообще хоть на 2Гб строку подай. А в MapBasic - ограничение 32767 символов. Не хватит?
По поводу реализации массивов - возможно есть общие принципы реализации, на смотреть области памяти под этими массивами. Это собственно и есть второй вариант, но уже посложнее. Получить из MapBasic массив, считать его указателем, и изучать память в окрестностях этого указателя, потом написать процедурку, которая будет уметь извлекать массив MapBasic из этого адреса памяти.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Serj



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

СообщениеДобавлено: Чт Авг 07, 2008 10:50 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

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

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


Top.Mail.Ru