Перейти к содержимому

Фотография

MapBasic и все что с ним связаноМожет я не один такой?!


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 388

#101
Jismo

Jismo
  • Свой человек
  • 975 сообщений
Есть руководство по МБ версии 9.5, так вот там в 13 главе написано про DOTNET на инглише только, но там достаточно простые примеры но все же есть хоть чтото.
  • 0

#102
swatch

swatch
  • Частый гость
  • 99 сообщений

Есть вопросец господа!
Как воспользоваться DotNet'овской функцией передающей массив в качестве параметра в программе на MB? Если можно то пример плиз!

Если честно не понял вопроса.
.NET-овская функция принимающая массив в качестве параметра?
из МB вызываем как? пример пожалуйста

Сообщение отредактировал swatch: 10.06.2009, 10:08:12

  • 0

#103
Jismo

Jismo
  • Свой человек
  • 975 сообщений
Ну в DLL есть метод в котором есть параметры и один из них массив.

ща минутку пример выложу
  • 0

#104
Jismo

Jismo
  • Свой человек
  • 975 сообщений
вот так пишу на С#:
static public double[] GeoCoord_XYtoBL(int GeoDatum, double[] XY)
я подаю туда массив координат XY(плоские координаты Гауса Крюгера), а возвращается массив координат BL(долгота широта)

  • 0

#105
swatch

swatch
  • Частый гость
  • 99 сообщений
замечание не по теме, но мне кажется нужен еще параметр зоны или смещение нуля по У
ИМХО для порядку :rotate:

Сообщение отредактировал swatch: 10.06.2009, 10:49:31

  • 0

#106
Jismo

Jismo
  • Свой человек
  • 975 сообщений
Да я просто выкинул оставшиеся параметры, все верно :rotate:
  • 0

#107
swatch

swatch
  • Частый гость
  • 99 сообщений
и еще одно глупое замечание :rotate:
зачем делать пересчет (трансформацию) координат самому не используя движок MI?
Или эти данные еще где-то нужны снаружи MI

Сообщение отредактировал swatch: 10.06.2009, 10:59:16

  • 0

#108
Jismo

Jismo
  • Свой человек
  • 975 сообщений
Да дело не в том какой метод я использую(это был пример просто) мне нужен ответ как передавать массив в DLL и возвращать массив из этой DLL. А движок MI я и так использую :rotate:
так сказать для будущих заморочек :mad:

Сообщение отредактировал Jismo: 10.06.2009, 11:04:54

  • 0

#109
Conkistador

Conkistador
  • Гость
  • 33 сообщений

2Conkistador У меня в программах достаточно того чтобы MBX файл лежал в одной директории с DLLкой.



2Jismo: у меня аналогично все работало.
Поэтому я и спрашиваю пример декларации сабов из DLL, мож там экзотично написано :rotate:


2Jismo & 2 swatch
вот пример объявления функции
'----------------------------------------------
Declare Method ExecuteMapInfo
	Class "MapInfoShowFoto.Startup" Lib "MapInfoShowFoto.dll"
	(aFoto As Integer, aFolder As Integer, ByVal aAzimut As String, 
	ByVal aTrackPointId As String,ByVal aCity As String,ByVal aDate1 As String,ByVal aaDate2 As String)
в том то и дело что и у меня достаточно чтобы они лежали рядом, но как только пользователь чтото откроет с помощью Файл->открыть... из другой папки как МБ тут же перестает видеть мою dll...
  • 0

#110
Conkistador

Conkistador
  • Гость
  • 33 сообщений


... получается что нарушается условие в соответствии с которым dll с дотнетовским методом должна находиться в одной папке со скриптом, т.к. папкой по умолчанию становится та папка откуда был открыт последний слой.


А если попробовать dll-ку и .mbx положить в один каталог с mapinfo.exe?
PS: сам не пробовал, но, вроде как, этот путь должен проверяться перед тем как mapInfo начнет ругаться.

попробовал так действительно перестал ругаться но это слегка не красивый вариант... нет ли другого способа побороть эту проблемму?
  • 0

#111
Jismo

Jismo
  • Свой человек
  • 975 сообщений
Ну тогда указывай директорию где будет лежать эта DLL и все :eek:
  • 0

#112
Jismo

Jismo
  • Свой человек
  • 975 сообщений
Это конечно тоже не очень хорошо зашивать строгую директорию в проге, но тем не менее у тебя уже есть 2 варианта.
Того и гляди скоро до истины докапаешься :eek:

СТОП!!!!! А ты что не добавлял свою прогу в каталог программ в MI???
  • 0

#113
Conkistador

Conkistador
  • Гость
  • 33 сообщений

Это конечно тоже не очень хорошо зашивать строгую директорию в проге, но тем не менее у тебя уже есть 2 варианта.
Того и гляди скоро до истины докапаешься :eek:

СТОП!!!!! А ты что не добавлял свою прогу в каталог программ в MI???

тааак а что за каталог программ и как в него добавить ????

Ну тогда указывай директорию где будет лежать эта DLL и все :)

а как это можно сделать ? при декларации не помогает....
  • 0

#114
Conkistador

Conkistador
  • Гость
  • 33 сообщений

Это конечно тоже не очень хорошо зашивать строгую директорию в проге, но тем не менее у тебя уже есть 2 варианта.
Того и гляди скоро до истины докапаешься :eek:

СТОП!!!!! А ты что не добавлял свою прогу в каталог программ в MI???


попробовал не годится....

я бы был не против запросить директорию например вот так ApplicationDirectory$() возвращается правильный путь к папке где лежит dll НО как это использовать ? разве можно динамически объявить процедуру в MB?

Сообщение отредактировал Conkistador: 10.06.2009, 12:18:41

  • 0

#115
Jismo

Jismo
  • Свой человек
  • 975 сообщений
Я после добавления в каталог программ просто использую свои проги в MI и все DLLки работают, не знаю почему у тебя не работает
  • 0

#116
swatch

swatch
  • Частый гость
  • 99 сообщений
Видимо БАГ MapInfo, но в мануале по MB написано так:

If your Declare statement specifies a DLL name without a path (e.g. ”mylib.dll”),
MapInfo tries to locate the DLL from various likely locations, in the following order:
1. If the DLL is in the same directory as the .MBX file, MapInfo loads the DLL;
otherwise, go to step 2.
2. If the DLL is in the directory where MapInfo is installed, MapInfo loads the
DLL; otherwise, go to step 3.
3. If the DLL is in the Windows\System directory, MapInfo loads the DLL;
otherwise, go to step 4.
4. If the DLL is in the Windows directory, MapInfo loads the DLL; otherwise, go
to step 5.
5. MapInfo searches for the DLL along the user’s system search path.


Должно само находить либу в указанных местах если декларация без пути.
На форум к MapInfo ходили?

Сообщение отредактировал swatch: 10.06.2009, 12:42:54

  • 0

#117
Conkistador

Conkistador
  • Гость
  • 33 сообщений

Видимо БАГ MapInfo, но в мануале по MB написано так:


If your Declare statement specifies a DLL name without a path (e.g. ”mylib.dll”),
MapInfo tries to locate the DLL from various likely locations, in the following order:
1. If the DLL is in the same directory as the .MBX file, MapInfo loads the DLL;
otherwise, go to step 2.
2. If the DLL is in the directory where MapInfo is installed, MapInfo loads the
DLL; otherwise, go to step 3.
3. If the DLL is in the Windows\System directory, MapInfo loads the DLL;
otherwise, go to step 4.
4. If the DLL is in the Windows directory, MapInfo loads the DLL; otherwise, go
to step 5.
5. MapInfo searches for the DLL along the user’s system search path.


Должно само находить либу в указанных местах если декларация без пути.
На форум к MapInfo ходили?

спасибо... будем пытаться...
нет не ходил, а как туда попасть ?
  • 0

#118
swatch

swatch
  • Частый гость
  • 99 сообщений

нет не ходил, а как туда попасть ?

Извините, что послал на форум не проверив. К сожалению, на форуме не нашел постов по MB, но в свое время они там были.
Также есть там База знаний по продуктам. Попробуйте поискать инфу про этот "баг" или спросить саппорт.

Сообщение отредактировал swatch: 10.06.2009, 14:34:02

  • 0

#119
Dragon_Fire

Dragon_Fire
  • Гость
  • 7 сообщений
День добрый всем, пишу программу для MapInfo, возникли следущие проблемы:
1) Необходимо в заданной точке на карте нарисовать окружность. Рисую так:
Exec("Insert Into {0} (Obj) Values ( CreateCircle( {1}, {2}, {3})) ", _TableName, X, Y, R);
Рисуется круг, заполненный белым цветом. Как мне нарисовать именно окружность, без заливки внутри?
2) Сразу после рисования, круг не отображается на карте, необходимо свернуть/развернуть окно или изменить масштаб карты чтобы он отобразился. Рисую его в анимационном слое, после рисования делаю так:
Exec("Update Window FrontWindow()");
В чем может быть проблема?
3) Как получить текущий масштаб карты и установить свой? т.е. у меня есть радиус того же самого круга, например 10 км. Как мне нарисовать круг именно 10км а не 10 тысяч км? И как можно попросить пользователя ввести масштаб?

Заранее спасибо! буду очень благодарен, срочно надо...
  • 0

#120
Jismo

Jismo
  • Свой человек
  • 975 сообщений
привет!
1) тебе надо задавать свойство Brush прозрачным: 1 параметр = 1
2) это потому что слой анимационный у него есть такой глюк, я тоже с этим сталкивался рисовало на половину :D
3) так получаем
MapperInfo( window_id, MAPPER_INFO_SCALE)
так изменяем
Set Map Scale screen_dist [ Units dist_unit ] For map_dist 
		[ Units dist_unit ]
символы "[]" означают что, то что внутри скобок, не обязательно писать, но в твоем случае надо
screen_dist и map_dist - задают масштаб Карты (например, screen_dist = 1 inch, map_dist = 1 mile).
Scale Изменяет масштаб показа Карты в окне. Например, следующий оператор изменяет увеличение Карты так, чтобы в 1 дюйме изображения было показано 10 миль Карты:
Set Map Scale 1 Units "in" For 10 Units "mi"
Вообщем почитай в хелпе или справочнике про: Set Map statement и MapperInfo
в диалоге пользователя проси его чтоб вводил масштаб(в текст бокс или куда-то еще)

PS: надеюсь ниче страшного если на "ты" я писал :D
  • 0


Количество пользователей, читающих эту тему: 2

пользователей: 0, неизвестных прохожих: 2, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.