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

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

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



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

СообщениеДобавлено: Вт Фев 27, 2007 12:38 am    Заголовок сообщения: вызов dll-ки Добавить ответ со ссылкой на данный текст

Коллеги, пытаюсь сделать так чтобы из мапинфо вызывать длл-ку со статистическим анализом, а она не вызывается :(
Программирую первы раз, так что не смейтесь громко.
Видимо не соображу как передать правильно массив данных ?

Код нацарапал примерно такой:

<--->

Declare sub main
declare sub stat_ lib "C:\Program Files\StatSoft\STATISTICA 6\sta_CLU.dll"

sub main
open table "G:\a000.TAB" as worc_tab
call stat_ ()
end sub main

<--->

если пишу call stat_ (*, worc_tab)
появляется ошибка
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
asgs



Зарегистрирован: 22.08.2006
Сообщения: 21
Откуда: Новосибирск

СообщениеДобавлено: Вт Фев 27, 2007 8:29 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Во-первых, не описаны параметры функции stat_. Естественно, при попытке вызова с параметрами компилятор будет громко материться.
Во-вторых, передача массива в параметрах функции - дело чреватое геморроем. Указатели MapBasic не поддерживает, если передавать массив приличного размера целиком - скорее всего переполнится стек и в лучшем случае рухнет программа, в худшем - MapInfo.
В третьих, в данном случае имеет место попытка передать функции аж таблицу MapInfo. Сильно сомневаюсь, что такое возможно вообще, особенно для библиотек "левых" производителей.
Вопрос - описание функций в библиотеке sta_CLU.dll где-нибудь глянуть можно?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
mettus



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

СообщениеДобавлено: Вт Фев 27, 2007 9:15 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

спасибо за ответ :)
Программка перестала ругаться "не найдена длл" когда переложил длл-ку в каталог с ней, правда стала показывать другую ошибку - "функция stat_ в длл не обнаружена".

Эта длл-к, видимо, выполняет кластерный анализ - три модифиации, к-средних, агломеративный иерархический алгоритм и two-way joyning (не знаю как по русски называется).
Она принадлежит программе statistika 6 (там длл-ки для каждого вида статанализа), и честноговоря не знаю как они относятся к встраиванию своих длл в сторонние программы/возможно даже не предусматривают ? описание поисчу в Сети, может что нарою ?

А какой может быть выход если МБ не может передать большой массив (а он у меня в несколько тысяч элементов)?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
mettus



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

СообщениеДобавлено: Вт Фев 27, 2007 9:21 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Вот, на сайте производителя, мол всё отлично встраивается и примеры http://www.statsoft.com/downloads/maintenance/example_apps.html
Мне по недостатку знаний правда не очень понятно пока ...

"The COM-base architecture of STATISTICA allows access to its library of functions through any COM-compliant programming language, such as Visual Basic, Visual Basic.NET, C#, and C++. In the case of C++, developers can integrate the Object Model of STATISTICA seamlessly with other libraries such as the Microsoft Foundation Classes, the C++ Standard Library, and the Standard Template Library. For example, the STL's rich set of algorithms and function objects can easily work in unison with the library of objects and functions of STATISTICA within a custom application.

One advantage of using C++ within a custom STATISTICA application is the optimized speed performance associated with C++. Because of the language's low-level capabilities (e.g., the ability to embed inline assembly instructions), custom algorithms written in C++ are extremely efficient. Another advantage of C++ is that it is a compiled language, which offers source code security to keep your custom applications proprietary.

To utilize STATISTICA's library in a C++ application, simply include the *.dll (dynamic link library) or *.exe that you wish to import classes from into your project and import its COM interface. Most compiler implement COM importing differently, so please examine the examples provided along with reviewing your compiler's documentation."
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
asgs



Зарегистрирован: 22.08.2006
Сообщения: 21
Откуда: Новосибирск

СообщениеДобавлено: Вт Фев 27, 2007 10:34 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

mettus писал(а):
The COM-base architecture of STATISTICA allows access to its library of functions through any COM-compliant programming...

Судя по всему, используется технология COM. Насколько я знаю, в MapBasic нет ее поддержки (и вряд ли появится).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
mettus



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

СообщениеДобавлено: Вт Фев 27, 2007 11:48 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

А если вызывать из какогото другого приложения?
Типа вызывает и статистику и Мапинфо и через неё обмениваются данными?
МИ вродебы поддерживает дде и оле?
Реально такое?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
mettus



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

СообщениеДобавлено: Вт Фев 27, 2007 12:00 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Или вообще наоборот сделать?
Читать таб-файл в программу Статистика, обрабатывать, а потом вызывать МИ для отображения резултататов?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
asgs



Зарегистрирован: 22.08.2006
Сообщения: 21
Откуда: Новосибирск

СообщениеДобавлено: Вт Фев 27, 2007 1:27 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Опять вопрос ;) - а какого типа результаты предполагается отображать в MapInfo? Не проще их показать прямо в Статистике, если графический анализ не требуется? Или можно писать статистические функции на MapBasic, тем более что некоторый минимум там уже есть.
Что про таблицы MapInfo - семантика там хранится в формате, практически идентичном DBF (файлы DAT), за индексы не поручусь.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
mettus



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

СообщениеДобавлено: Вт Фев 27, 2007 4:12 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

В МИ отражаются результаты классификации пространственных обьектов, т.е. в статистике получаю в итоге код - у каждого обьекта - 1 2 3 4 5 6, и строится карта которая это показывает.
Програма нужна для украшения диссера, руководитель рекомендовал что-нибудь обязательно написать :)
А с этим пока сложно, увы ...

Думаю чего бы попроще учадить, раз с этой идеей пока не.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Shadow_Fighter



Зарегистрирован: 21.02.2007
Сообщения: 13
Откуда: Нижний Новгород

СообщениеДобавлено: Пн Апр 09, 2007 11:38 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

если есть опыт программирования на делфи: пишете вашу dll'ку, причем к описанию ее функций обязательно укажите директиву stdcall, ее и вызываете из вашей программы на mapbasic, а уж в dll-ке можно делать все что угодно: com, ole, вызов других dll'ок (хоть той же statistic'и) - возможности delphi в этом плане шире в разы
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Страница 1 из 1

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


Top.Mail.Ru