Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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 где-нибудь глянуть можно? |
|
Вернуться к началу |
|
|
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 нет ее поддержки (и вряд ли появится). |
|
Вернуться к началу |
|
|
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), за индексы не поручусь. |
|
Вернуться к началу |
|
|
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 в этом плане шире в разы |
|
Вернуться к началу |
|
|
|