ну это это кажется старые данные, этот код остался от первых версий ШЭ, когда у них было мало астероидов и больше не планировали, попробуйте его поставить в 200000, в swedll32.dll примерно так и будет прописанно, должно работать раз эфемериды астероидов с такими номерами в системе есть.
я то больше чем с 2000 пока не работал и не предвидел эту проблему..
Так тип integer только до 32787. Дальше Long. API функция принимает только int. Номер Eris - 136199 уже больше и вызов дает ошибку. Что-то там недосказано. Но у Зайцева ведь все подключается, может для Delphy есть отличия?
Да это кажется уже встроенно в ШЭ, сделаем!
Просто нужно будет кое что добавиить в функцию PLC ..
Только я надеюсь вам не срочно это нужно? потому что сейчас готовлю новую версию макросов, с кучей апов, планировал её выложить еще на новогодних праздниках, но все зависло на пол пути, добавил еще несколько функций, и еще больше планирую, и даже написал половину хэлпа (теперь будет отдельно справочник по ним в виде CHM файла, надеюсь это облегчит работу).
Там в ШЭ еще есть много возможностей, которые не дошли руки включить...
Упсс... ну как говориться, если вас съели, то у вас остается только 2 выхода...
Тогда остается взять исходники, поменять int на long и перекомпилить dll'ку ... только что-то мне подсказывает, что это повлечет за собой еще кучу ошибок...
Вообще на BCB мне удавалось только один раз это дело скомпилить и то после долгой возни, а с GCC я вообще не дружу ((
Ну вот. Подтверждаю невозможность подключения объектов с номером более 32767 (как это описано в ftp://ftp.astro.ch/pub/swisseph/doc/swephprg.doc )
для API VB. Прогнал весь цикл от 1 до 32767 всех объектов. Те, эфемериды которых были скачаны и номера в этом диапазоне - просчитаны. Файл Eris не тронут и не просчитан. Значит все что далее 32767 неподключаемо. Нужен другой интерфейс.
Но дома и классику считает классно..
Похоже проблема в самом VBA, видимо C и VBA по разному интерпретируют тип INT, в отличии от Delphi...
Думаю можно просто добавить функцию Swe_Calc_Plus в саму dll'ку, которая будет вызываться из VBA вместо Swe_Calc.
На пример, она будет брать не INT, а double, внутри себя перекодировать это дело в INT и вызывать родную Swe_Calc.
Конечно изврат... но всего 3 строчки кода получится, и внутри dll'ки типы не придется перекраивать...
Ребят, никак не могу создать новую тему,пишет что тема создана, хотя в ветке не появляется!! Профильного топика по техническим проблемам форума тоже нет!
Что делать???
Теоретически можно, но на практике это такой геморой, что лучше не связываться, да и зачем в наш-то век винды?
Для этого можно, на пример, скомпилить в досовской версии Borland C++ из исходников obj файлы, а потом использовать это в басиковском экзешнике.
Но дело в том, что исходный код ШЭ скорей всего будет процентов на 70 не совместим с досовским C++ т.е. придется перекраивать под него половину кода, а это лучше удавиться :))
Но на сколько я понял, вас вообще интересует возможность использовать ШЭ в басике?
Тогда в принципе можно использовать swedll32.dll с любым байсиковским компилятором который заточен под винду. На пример, тот же Visual Basic for aplications, а еще лучше, есть такой Power basic (немножко подкорректировать деклорации функций, но зато потом все будет очень хорошо работать), делается это точно так же, как и в случае с эксель, только на выходе экзешник получится. В принципе тот байсик, что встроен в эксель мало чем отличается от самостоятельного, большая часть кода работает и там и там.
Дело в том, что в досе скорость расчетов на порядок выше, чем в экселе. Например, в экселе может уйти 15-20 минут, а в досе минута-две. А виндовский экзешник будет работать быстрее?
Да экзешник будет работать гораздо быстрей, дело в том, что экселевский басик это ведь интерпретатор, он раз в 10 медленей работает чем сама DLLка. Если тот же самый код скомпилировать в родной для процессора язык то и дело пойдет гораздо быстрей. :))
Как вариант можно зашить код функций в другую dllку, в которой будут производиться основные вычисления (в экселевском модуле оставить только их деклорации), из неё вызывать швейцарские эфемериды, а её саму чтоб вызывал эксель, но это тож достаточно геморно, хотя гораздо проще, чем подключить ШЭ к ДОСу и немного быстрей считать будет...
Что касается ДОСа, то иногда он работает немного быстрей за счет однозадачности, но это только кажется и только для некоторых задач, если, на пример, работать с текстовыми файлами эфемерид, как вы хотите и еще записывать результаты в другой файл, то это будет раз в 10 медленей любой аналогичной проги в винде и наверняка медленей эксели.
Досовский вариант (с заранее заготовленной БД эфемерид) тестировался на расчет эмпирического распределения:
Случайным образом формировалась выборка объемом 360 записей. В выборке подсчитывалось количество карт удовлетворяющих условию положения Солнца в Овне. Количество повторений этого опыта - 100 000 раз. В массиве шло накопление - сколько раз выпадало то или иное количество карт.
Затраченное время - 10 с половиной минут. Сколько это займет времени в экселе даже и говорить не хочется. :))) Посмотрим, что покажет экзешник.