<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: использование функций из swedll32.dll (Астрологические расчеты)]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=8261</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=8261&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: использование функций из swedll32.dll (Астрологические расчеты)».]]></description>
		<lastBuildDate>Sun, 05 May 2013 17:46:41 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: использование функций из swedll32.dll (Астрологические расчеты)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=71915#p71915</link>
			<description><![CDATA[<p><strong>serzh82saratov</strong>, спасибо за примеры и разъяснения.</p>]]></description>
			<author><![CDATA[null@example.com (Mikki)]]></author>
			<pubDate>Sun, 05 May 2013 17:46:41 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=71915#p71915</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: использование функций из swedll32.dll (Астрологические расчеты)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=71886#p71886</link>
			<description><![CDATA[<p>Про Join есть и в русской справке:<br /><a href="http://www.script-coding.com/AutoHotkey/Scripts.html#chapter_4">Разбивка длинных строк на ряд более коротких</a></p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sat, 04 May 2013 17:17:07 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=71886#p71886</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: использование функций из swedll32.dll (Астрологические расчеты)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=71885#p71885</link>
			<description><![CDATA[<div class="codebox"><pre><code>
ZodName := [&quot;Овен    &quot;,&quot;Телец   &quot;,&quot;Близнецы&quot;,&quot;Рак     &quot;,&quot;Лев     &quot;,&quot;Дева    &quot;,&quot;Весы    &quot;,&quot;Скорпион&quot;,&quot;Стрелец &quot;,&quot;Козерог &quot;,&quot;Водолей &quot;,&quot;Рыбы    &quot;)]
</code></pre></div><p>&nbsp; у вас скобка в конце лишняя.</p><p>Также можно записать для удобства чтения с переносом строки<br /></p><div class="codebox"><pre><code>
 ZodName := [&quot;Овен    &quot;,&quot;Телец   &quot;,&quot;Близнецы&quot;
            ,&quot;Рак     &quot;,&quot;Лев     &quot;,&quot;Дева    &quot;
            ,&quot;Весы    &quot;,&quot;Скорпион&quot;,&quot;Стрелец &quot;
            ,&quot;Козерог &quot;,&quot;Водолей &quot;,&quot;Рыбы    &quot;]
loop 12
    MsgBox % ZodName[A_Index]
</code></pre></div><p>Для ускорения работы скрипта можете добавлять </p><div class="codebox"><pre><code>SetBatchLines, -1</code></pre></div><p> но это вы наверняка знаете.,</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Sat, 04 May 2013 17:12:09 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=71885#p71885</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: использование функций из swedll32.dll (Астрологические расчеты)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=71884#p71884</link>
			<description><![CDATA[<p><strong>creature.ws</strong>, честно говоря надеялся на ваш отзыв )) Вы всегда представляете сжатый и (еслитакможносказать) высокотехничный код.<br />Вопрос по <em>Join</em>. Я так понял эта команда все строки сводит в одну переменную. Так можно эту команду убрать и получится:</p><div class="codebox"><pre><code>ZodName := [&quot;Овен    &quot;,&quot;Телец   &quot;,&quot;Близнецы&quot;,&quot;Рак     &quot;,&quot;Лев     &quot;,&quot;Дева    &quot;,&quot;Весы    &quot;,&quot;Скорпион&quot;,&quot;Стрелец &quot;,&quot;Козерог &quot;,&quot;Водолей &quot;,&quot;Рыбы    &quot;)]</code></pre></div><p> Я прав? Вы использовали <em>Join</em> для красоты записи?</p><p><strong>YMP</strong>, да..наверное я перебдел. Пере присвоений классов тут нет и смысл в их использовании нулевой. Переделаю все на процедуры и запись станет короче</p>]]></description>
			<author><![CDATA[null@example.com (Mikki)]]></author>
			<pubDate>Sat, 04 May 2013 16:44:54 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=71884#p71884</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: использование функций из swedll32.dll (Астрологические расчеты)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=71833#p71833</link>
			<description><![CDATA[<div class="quotebox"><cite>Mikki пишет:</cite><blockquote><p>Но смысл в вопроса в нужности использовать структуру <strong>class</strong>. Вроде бы Вы в своих больших скриптах не использовали его для подобных целей. Это не удобно? Захламляет? Медленнее работает?</p></blockquote></div><p>Я лично классами не пользуюсь, потому что появились они недавно и я с ними не разбирался. Что касается скорости работы, то это надо брать во внимание для операций, выполняемых в цикле очень большое число раз — тысячи, миллионы. В остальном большее значение имеет удобство написания и чтения кода. Вообще, скорость лучше оценивать, когда программа готова. Если не устраивает, тогда и думать об оптимизации и ускорении.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Fri, 03 May 2013 04:19:36 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=71833#p71833</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: использование функций из swedll32.dll (Астрологические расчеты)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=71832#p71832</link>
			<description><![CDATA[<p>Не претендую на звание програмёра и тем более опытного, но гребёнку <em>else if</em>-ов для сопоставления индекса и текстового представления считаю уместным заменять на:<br /></p><div class="codebox"><pre><code>ZodName := [
(Join,
&quot;Овен    &quot;
&quot;Телец   &quot;
&quot;Близнецы&quot;
&quot;Рак     &quot;
&quot;Лев     &quot;
&quot;Дева    &quot;
&quot;Весы    &quot;
&quot;Скорпион&quot;
&quot;Стрелец &quot;
&quot;Козерог &quot;
&quot;Водолей &quot;
&quot;Рыбы    &quot;
)]

MsgBox % ZodName[1]</code></pre></div><p>Код вами уже написан, «аборт делать поздно», но, например, блок:<br /></p><div class="codebox"><pre><code>nZod := 1+aData//30
gr0 := aData-(nZod-1)*30
Grad := Floor(gr0)
min0 := (gr0-Grad)*60
Min := Floor(min0)
Sec := Floor((min0-min)*60)</code></pre></div><p>— повторяется дважды без изменений в if и else, как и упомянутое сопоставление. На то есть причины?</p>]]></description>
			<author><![CDATA[null@example.com (creature.ws)]]></author>
			<pubDate>Thu, 02 May 2013 23:30:36 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=71832#p71832</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: использование функций из swedll32.dll (Астрологические расчеты)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=71830#p71830</link>
			<description><![CDATA[<p>Доброго здравия читающим.</p><p>Благодаря поучениям и наставлениям опытных програмеров (т.е. Вас) программа пишется и &quot;хомуты&quot; убираются. Но - назрел вопрос о правильности моего подхода к концепции в целом.</p><p>Вы, как более опытные в написании многостраничного кода, что скажете об использовании Объекта в качестве массива данных?...(наверное не корректно излагаю мысль..)</p><p>Для наглядности, ниже привожу код своего скрипта. Он работающий. Для его работы надо наличие одной dll и еще 3-х файлов с данными. Но смысл в вопроса в нужности использовать структуру <strong>class</strong>. Вроде бы Вы в своих больших скриптах не использовали его для подобных целей. Это не удобно? Захламляет? Медленнее работает?</p><div class="codebox"><pre><code>#NoEnv 
#Singleinstance force
    
/*
S_11 - Восх.Узел
S_13 - Лилит
S_15 - Хирон
S_56 - Селена
S_57 - Прозерпина

*/
    global xx, StrErr, Planet, House
    
    VarSetCapacity(xx, 8 * 6) ; - Массив:положение планеты, 
    VarSetCapacity(StrErr, 256)
    Arg:=2 ; + 32 * 1024                        ; - использовать файлы эфемерид из папки
    
    SetWorkingDir, %A_ScriptDir%
    s=%A_ScriptDir%\EPHE\        ; - папка файлов эфемерид
    EnvGet, ss, SE_EPHE_PATH
    EnvSet, SE_EPHE_PATH, % s
    
    hSwiss := DllCall(&quot;LoadLibrary&quot;,str, &quot;swedll32.dll&quot;)
    
    VarSetCapacity(Cuspids, 8 * 13) ; - Массив: положение куспидов
    VarSetCapacity(Asc_mc, 8 * 10)
    geolat:=10                        ; - долгота
    geolon:=25                    ; - широта
    Transform, hsys, Asc, p            ; - система домов - Плацидус
    
    JulDay:= swe_julday( A_Year, A_MM, A_DD)            ; задание даты в формате swiss efem
    result:=DllCall(&quot;swedll32.dll\_swe_houses@36&quot;        ; расчет домов
                    , double, JulDay
                    , double, geolat
                    , double, geolon
                    , int, hsys        
                    , Ptr, &amp;Cuspids
                    , Ptr, &amp;Asc_mc )
    loop, 12 {
        hh := NumGet(Cuspids, A_Index * 8, &quot;Double&quot;)
        House%A_Index%:= new PlanetInfo(A_Index,hh, 1)
        h_out= % h_out House%A_Index%.H_Name &quot; - &quot; hh &quot;  -  &quot; House%A_Index%.H_Zod &quot; &quot; 
                . House%A_Index%.H_GradZ &quot;° &quot; House%A_Index%.H_MinZ &quot;&#039; &quot; House%A_Index%.H_SecZ &quot;&quot;&quot;`n&quot; 
        }
    MsgBox, %h_out%

    Loop, 16                                            ; расчет планет
    {
        if (A_Index = 11)                        ; расчет Хирона
            result := swe_calc_ut(JulDay, 15, Arg, xx, StrErr)
        else if (A_Index=12)                    ; расчет Прозерпины
            result := swe_calc_ut(JulDay, 57, Arg, xx, StrErr)
        else if (A_Index=13 or A_Index=14)        ; расчет узлов
            result := swe_calc_ut(JulDay, 11, Arg, xx, StrErr)
        else if (A_Index=15)                    ; расчет Селены
            result := swe_calc_ut(JulDay, 56, Arg, xx, StrErr)
        else if (A_Index=16)                    ; расчет Лилит
            result := swe_calc_ut(JulDay, 12, Arg, xx, StrErr)
        else
            result := swe_calc_ut(JulDay, A_Index-1, Arg, xx, StrErr)
        xx1 := NumGet(xx, &quot;Double&quot;)
        xx1 := (A_Index=14) ? ((xx1&gt;180) ? xx1-180 : xx1+180) : xx1 ;Нисходящий узел - напротив восходящего
        Planet%A_Index%:= new PlanetInfo(A_Index,xx1, 0 )
        p_out= % p_out A_Index &quot; &quot; Planet%A_Index%.Name &quot;(&quot; Planet%A_Index%.inHouse &quot;)  -  &quot; Planet%A_Index%.Zod &quot; &quot; 
                . Planet%A_Index%.GradZ &quot;° &quot; Planet%A_Index%.MinZ &quot;&#039; &quot; Planet%A_Index%.SecZ &quot;&quot;&quot;`n&quot; 
    }
    
    if Planet1.nZod in 1,2,3,4,5,6                 ; расчет Колеса различается для дневного и ночного рождения
        ii:=1
    else
        ii:=-1
    dz:=ii*(( abs(Planet2.Data-Planet1.Data) &gt;180) ? 360-abs(Planet2.Data-Planet1.Data) : abs(Planet2.Data-Planet1.Data))
    pozz:= House1.H_Data+dz&gt;360 ? House1.H_Data+dz-360 : House1.H_Data+dz    ; Asc-Moon+Sun - если больше 360 - то вычесть 360
    Planet17:= new PlanetInfo(17,pozz,0)
    dz:=( abs(Planet5.Data-Planet7.Data) &gt;180) ? 360-abs(Planet5.Data-Planet7.Data) : abs(Planet5.Data-Planet7.Data)
    pozz:= House1.H_Data+dz&gt;360 ? House1.H_Data+dz-360 : House1.H_Data+dz    ; Asc-Mars+Sat - если больше 360 - то вычесть 360
    Planet18:= new PlanetInfo(18,pozz,0)

    p_out= % p_out 17 &quot; &quot; Planet17.Name &quot;(&quot; Planet17.inHouse &quot;)  -  &quot; Planet17.Zod &quot; &quot; 
            . Planet17.GradZ &quot;° &quot; Planet17.MinZ &quot;&#039; &quot; Planet17.SecZ &quot;&quot;&quot;`n&quot; 
    p_out= % p_out 18 &quot; &quot; Planet18.Name &quot;(&quot; Planet18.inHouse &quot;)  -  &quot; Planet18.Zod &quot; &quot; 
            . Planet18.GradZ &quot;° &quot; Planet18.MinZ &quot;&#039; &quot; Planet18.SecZ &quot;&quot;&quot;`n&quot; 
    
    MsgBox, ,,%p_out%

    IfMsgBox, Retry
        Reload
    DllCall(&quot;FreeLibrary&quot;, Ptr, hSwiss)
    EnvSet, SE_EPHE_PATH, % ss
    
ESC:: ExitApp

Return ;=================================================================================



swe_julday(1Year, 1Month, 1Day, 1Time=0, 2Time=0, STD_Gre=1) { ; Год, Месяц, День, Часы, Минуты, ГрегорианскийФлаг
    1Time+=2Time/60
    return DllCall(&quot;swedll32.dll\_swe_julday@24&quot;
                    , Int, 1Year
                    , Int, 1Month
                    , Int, 1Day
                    , Double, 1Time
                    , Int, STD_Gre
                    , Double)
}

swe_calc_ut(DataJulDay, PlanetNum, AlgorFlag, ByRef xx, ByRef StrErr) {
    return DllCall(&quot;swedll32.dll\_swe_calc_ut@24&quot;
                    , Double, DataJulDay
                    , Int, PlanetNum
                    , Int, AlgorFlag
                    , Ptr, &amp;xx
                    , Ptr, &amp;StrErr)
}

class PlanetInfo
{
    __New(Num, aData, p_OR_h)  ;p_OR_h=0 - планеты, p_OR_h=1 - дома
    {
    if !p_OR_h
        {
        nZod:=1+aData//30        
        gr0:=aData-(nZod-1)*30
        Grad:=Floor(gr0)
        min0:=(gr0-Grad)*60
        Min:=Floor(min0)
        Sec:=Floor((min0-min)*60)

        this.Data:=aData
        this.DataZ:=gr0
        this.GradZ:=Grad
        this.MinZ:=Min
        this.SecZ:=Sec
        this.nZod:=nZod
        
        if nZod=1
            this.Zod:=&quot;Овен    &quot;
        else if nZod=2
            this.Zod:=&quot;Телец   &quot;
        else if nZod=3
            this.Zod:=&quot;Близнецы&quot;
        else if nZod=4
            this.Zod:=&quot;Рак     &quot;
        else if nZod=5
            this.Zod:=&quot;Лев     &quot;
        else if nZod=6
            this.Zod:=&quot;Дева    &quot;
        else if nZod=7
            this.Zod:=&quot;Весы    &quot;
        else if nZod=8
            this.Zod:=&quot;Скорпион&quot;
        else if nZod=9
            this.Zod:=&quot;Стрелец &quot;
        else if nZod=10
            this.Zod:=&quot;Козерог &quot;
        else if nZod=11
            this.Zod:=&quot;Водолей &quot;
        else if nZod=12
            this.Zod:=&quot;Рыбы    &quot;
            
        if nZod in 1,4,7,10
            this.Cress:=1
        else if nZod in 2,5,8,11
            this.Cress:=2
        else if nZod in 3,6,9,12
            this.Cress:=3
            
        if nZod in 1,5,9
            this.Element:=1
        else if nZod in 2,6,10
            this.Element:=2
        else if nZod in 3,7,11
            this.Element:=3
        else if nZod in 4,8,12
            this.Element:=4

        if Num=1
            this.Name := &quot;Солнце        &quot;
        else if Num=2
            this.Name := &quot;Луна          &quot;
        else if Num=3
            this.Name := &quot;Меркурий      &quot;
        else if Num=4
            this.Name := &quot;Венера        &quot;
        else if Num=5
            this.Name := &quot;Марс          &quot;
        else if Num=6
            this.Name := &quot;Юпитер        &quot;
        else if Num=7
            this.Name := &quot;Сатурн        &quot;
        else if Num=8
            this.Name := &quot;Уран          &quot;
        else if Num=9
            this.Name := &quot;Нептун        &quot;
        else if Num=10
            this.Name := &quot;Плутон        &quot;
        else if Num=11
            this.Name := &quot;Хирон         &quot;
        else if Num=12
            this.Name := &quot;Прозерпина    &quot;
        else if Num=13
            this.Name := &quot;Восх.Узел     &quot;
        else if Num=14
            this.Name := &quot;Нисх.Узел     &quot;
        else if Num=15
            this.Name := &quot;Селена        &quot;
        else if Num=16
            this.Name := &quot;Лилит         &quot;
        else if Num=17
            this.Name := &quot;Колесо Фортуны&quot;
        else if Num=18
            this.Name := &quot;Крест Судьбы  &quot;
            
        loop, 12 {                        ; определение нахождения планет в домах
            ind2:= (A_Index+1=13 ? 1 : A_Index+1)
            H1:=House%A_Index%.H_Data
            H2:=House%ind2%.H_Data
            h1-h2&gt;180 ? (this.Data-h1&gt;0 ? h2+=360 : h1-=360) :
            if (this.Data &gt; H1) &amp; (this.Data &lt; H2) {
                this.inHouse:=A_Index
                break
                }
            }
        } ; конец блока расчета планет
    else
        {
        nZod:=1+aData//30        
        gr0:=aData-(nZod-1)*30
        Grad:=Floor(gr0)
        min0:=(gr0-Grad)*60
        Min:=Floor(min0)
        Sec:=Floor((min0-min)*60)

        this.H_Data:=aData
        this.H_DataZ:=gr0
        this.H_GradZ:=Grad
        this.H_MinZ:=Min
        this.H_SecZ:=Sec
        this.H_nZod:=nZod
        
        if nZod=1
            this.H_Zod:=&quot;Овен    &quot;
        else if nZod=2
            this.H_Zod:=&quot;Телец   &quot;
        else if nZod=3
            this.H_Zod:=&quot;Близнецы&quot;
        else if nZod=4
            this.H_Zod:=&quot;Рак     &quot;
        else if nZod=5
            this.H_Zod:=&quot;Лев     &quot;
        else if nZod=6
            this.H_Zod:=&quot;Дева    &quot;
        else if nZod=7
            this.H_Zod:=&quot;Весы    &quot;
        else if nZod=8
            this.H_Zod:=&quot;Скорпион&quot;
        else if nZod=9
            this.H_Zod:=&quot;Стрелец &quot;
        else if nZod=10
            this.H_Zod:=&quot;Козерог &quot;
        else if nZod=11
            this.H_Zod:=&quot;Водолей &quot;
        else if nZod=12
            this.H_Zod:=&quot;Рыбы    &quot;

        this.H_Name:= &quot;Дом &quot; (Num&gt;9 ? Num : &quot;0&quot; Num)
        }
    }
}

Return
</code></pre></div><p> небольшое разъяснение - в методе <strong>__New</strong> происходит расчет положения планеты (или &quot;дома&quot;) в различных элементах астрологической карты.</p><p>off: Наверное, я ни как не могу отказаться от Delphi-йской привычки записывания через классы...</p>]]></description>
			<author><![CDATA[null@example.com (Mikki)]]></author>
			<pubDate>Thu, 02 May 2013 22:21:18 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=71830#p71830</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: использование функций из swedll32.dll (Астрологические расчеты)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=71713#p71713</link>
			<description><![CDATA[<p><strong>YMP</strong>, еще раз - огромное спасибо.</p>]]></description>
			<author><![CDATA[null@example.com (Mikki)]]></author>
			<pubDate>Sun, 28 Apr 2013 12:15:59 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=71713#p71713</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: использование функций из swedll32.dll (Астрологические расчеты)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=71708#p71708</link>
			<description><![CDATA[<p>_swe_julday@24 возвращает Double. Это нужно указать в дополнительном последнем параметре при вызове функции. Календарь у нас григорианский, поэтому 5-й параметр должен быть 1. При вычислении долей часа A_Min нужно делить на 60. После этих исправлений вроде всё работает.<br /></p><div class="codebox"><pre><code>
#NoEnv 

    SetWorkingDir, %A_ScriptDir%
    hSwiss := DllCall(&quot;LoadLibrary&quot;,str, &quot;swedll32.dll&quot;)

    tt:= A_Hour+A_Min/60

    r_tjd:=DllCall(&quot;swedll32.dll\_swe_julday@24&quot;
                    , Int, A_Year
                    , Int, A_MM
                    , Int, A_Mday
                    , Double, tt
                    , Int, 1
                    , Double) &quot;`n`nError: &quot; ErrorLevel

    MsgBox, r_tjd = %r_tjd% 

    tjd:=2000000
    ipl:=0
    iflag:=0
    
    VarSetCapacity(xx, 8 * 6)
    VarSetCapacity(sERR, 256)

    result:=DllCall(&quot;swedll32.dll\_swe_calc_ut@24&quot;
                    , Double, r_tjd
                    , Int, ipl
                    , Int, iflag
                    , Ptr, &amp;xx
                    , Ptr, &amp;sERR) &quot;`n`nError: &quot; ErrorLevel

    xx1 := NumGet(xx, &quot;Double&quot;)
    xx2 := NumGet(xx, 8, &quot;Double&quot;)
    xx3 := NumGet(xx, 16, &quot;Double&quot;)

    sERR := StrGet(&amp;sERR, &quot;cp1252&quot;)

    MsgBox, xx1 = %xx1%`nxx2 = %xx2%`nxx3 = %xx3%`nsERR = %sERR%`nresult = %result%
     
     DllCall(&quot;FreeLibrary&quot;, Ptr, hSwiss)
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Sun, 28 Apr 2013 03:27:05 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=71708#p71708</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: использование функций из swedll32.dll (Астрологические расчеты)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=71697#p71697</link>
			<description><![CDATA[<p>Добавил сам обращение к функции <em>_swe_julday@24</em>. Подозреваю, что не правильно добавил. Но это ладно. Однако скрипт, почему-то, перестаёт выдавать <strong>xx</strong>, пока не закоментишь обращение к <em>_swe_julday@24</em>.</p><div class="codebox"><pre><code>#NoEnv 


    SetWorkingDir, %A_ScriptDir%
    hSwiss := DllCall(&quot;LoadLibrary&quot;,str, &quot;swedll32.dll&quot;)

    tt:= A_Hour+A_Min/0.6
    r_tjd:=DllCall(&quot;swedll32.dll\_swe_julday@24&quot;
                    , Int, A_Year
                    , Int, A_MM
                    , Int, A_Mday
                    , Double, tt
                    , Int, 0) &quot;`n`nError: &quot; ErrorLevel
    MsgBox, r_tjd = %r_tjd% 

    tjd:=2000000
    ipl:=0
    iflag:=0
    
    VarSetCapacity(xx, 8 * 6)
    VarSetCapacity(sERR, 256)

    result:=DllCall(&quot;swedll32.dll\_swe_calc_ut@24&quot;
                    , Double, tjd
                    , Int, ipl
                    , Int, iflag
                    , Ptr, &amp;xx
                    , Ptr, &amp;sERR) &quot;`n`nError: &quot; ErrorLevel

    xx1 := NumGet(xx, &quot;Double&quot;)
    xx2 := NumGet(xx, 8, &quot;Double&quot;)
    xx3 := NumGet(xx, 16, &quot;Double&quot;)

    sERR := StrGet(&amp;sERR, &quot;cp1252&quot;)

    MsgBox, xx1 = %xx1%`nxx2 = %xx2%`nxx3 = %xx3%`nsERR = %sERR%`nresult = %result%
     
     DllCall(&quot;FreeLibrary&quot;, Ptr, hSwiss)
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Mikki)]]></author>
			<pubDate>Sat, 27 Apr 2013 17:47:35 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=71697#p71697</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: использование функций из swedll32.dll (Астрологические расчеты)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=71695#p71695</link>
			<description><![CDATA[<p>..учусь, учусь помалеху. Спасибо.</p><p>(added 26.04.2013. обновил название темы и аттачмент)</p>]]></description>
			<author><![CDATA[null@example.com (Mikki)]]></author>
			<pubDate>Sat, 27 Apr 2013 17:33:38 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=71695#p71695</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: использование функций из swedll32.dll (Астрологические расчеты)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=71693#p71693</link>
			<description><![CDATA[<div class="codebox"><pre><code>xx2 := NumGet(xx, 8, &quot;Double&quot;)
xx3 := NumGet(xx, 16, &quot;Double&quot;)
...</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (creature.ws)]]></author>
			<pubDate>Sat, 27 Apr 2013 17:25:13 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=71693#p71693</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: использование функций из swedll32.dll (Астрологические расчеты)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=71691#p71691</link>
			<description><![CDATA[<p>Выдержка из <a href="http://www.astro.com/swisseph/swephprg.htm">доки по этой длл</a>:</p><div class="codebox"><pre><code>int swe_calc ( double tjd, int ipl, int iflag, double* xx, char* serr),
where
tjd    =Julian day
ipl    =body number
iflag    =a 32 bit integer containing bit flags that indicate what kind of computation is wanted
xx     =array of 6 doubles for longitude, latitude, distance, speed in long., speed in lat., and speed in dist.
serr[256] =character string to return error messages in case of error.
</code></pre></div><p>Спасибо огромное <strong>YMP </strong>за &quot;причесывание&quot; моего кода. Начало выдавать <strong>xx</strong> (!!!)<br />А как получить хх2, хх3, итд?</p>]]></description>
			<author><![CDATA[null@example.com (Mikki)]]></author>
			<pubDate>Sat, 27 Apr 2013 17:02:06 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=71691#p71691</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: использование функций из swedll32.dll (Астрологические расчеты)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=71689#p71689</link>
			<description><![CDATA[<div class="codebox"><pre><code>
#NoEnv 

/*
  function swe_calc(tjd         : double;    {Julian day number}     {расчет положения of planets, asteroids, lunar nodes and apogees}
                    ipl         : Integer;   {planet number}
                    iflag       : Longint;   {flag bits}
                    var xx      : double;    {first of 6 doubles}
                    sErr        : PChar      {Error-String}
                    ): Longint; stdcall; far; external &#039;swedll32.dll&#039; name &#039;_swe_calc@24&#039;;

*/
    SetWorkingDir, %A_ScriptDir%
    hSwiss := DllCall(&quot;LoadLibrary&quot;,str, &quot;swedll32.dll&quot;)
    MsgBox, % hSwiss &quot;`n`nError: &quot; ErrorLevel
    tjd:=20000
    ipl:=0
    iflag:=1
    
    VarSetCapacity(xx, 8 * 6)
    VarSetCapacity(sERR, 256)

    result:=DllCall(&quot;swedll32.dll\_swe_calc@24&quot;
                    , Double, tjd
                    , Int, ipl
                    , Int, iflag
                    , Ptr, &amp;xx
                    , Ptr, &amp;sERR) &quot;`n`nError: &quot; ErrorLevel

    xx1 := NumGet(xx, &quot;Double&quot;)
    sERR := StrGet(&amp;sERR, &quot;cp1252&quot;)

    MsgBox, xx1 = %xx1%`nsERR = %sERR%`nresult = %result%
     
     DllCall(&quot;FreeLibrary&quot;, Ptr, hSwiss)
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Sat, 27 Apr 2013 09:21:36 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=71689#p71689</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: использование функций из swedll32.dll (Астрологические расчеты)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=71688#p71688</link>
			<description><![CDATA[<p>Что-то ни dll, ни doc не хотят грузиться, так что ограничусь теорией.</p><p>Если функция пишет в хх, то ей нужен указатель на хх, а не значение хх. Если число одно, то VarSetCapacity по идее не нужна, просто указать для параметра тип Double *.</p><p>Или, учитывая {first of 6 doubles}, там должно быть 6 чисел такого типа? Если да, то выделять под них место через VarSetCapacity (8 * 6 = 48 байт) и после вызова функции считывать их через NumGet.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Sat, 27 Apr 2013 03:27:24 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=71688#p71688</guid>
		</item>
	</channel>
</rss>
