StarEdik
Новичок
- Сообщения
- 365
- Репутация
- 4
Привет всем !!!
Я мало знаком с dll и не уверен в правильности с использованием dll в autoit.Написал скрипт, но не могу получать данные .
Данные из DLL получаю с помощью VB6 и через макроса Excel.
Используется это функция так
Про DLL
Я мало знаком с dll и не уверен в правильности с использованием dll в autoit.Написал скрипт, но не могу получать данные .
Код:
Global Const $SEFLG_SWIEPH = 2
Global Const $SEFLG_MOSEPH = 4
Global Const $SEFLG_SPEED = 256
Global Const $SEFLG_TRUEPOS = 16
Global $JD ,$pl , $iflag , $serr ,$Plcc , $result , $x[6]
$JD=2456050.74931
$pl=0 ;(0,1,2,3,4,5,6,7,8,9)
;$iflag = $SEFLG_TRUEPOS + $SEFLG_SWIEPH
$iflag = $SEFLG_SPEED + $SEFLG_MOSEPH
$Plcc =$x[0]
$serr =String(255)
_PLC()
Func _PLC()
$Dll2 = DllOpen(@ScriptDir & "\swedll32.dll")
$Asp2 ='_swe_calc_ut@24'
$result2 = DllCall($dll2, "long", $Asp2,"double",$JD,"int",$pl,"int",$iflag,"double",$Plcc,"str",$serr)
ConsoleWrite(' 1 $Asp2- ' & VarGetType($Asp2) & @CRLF & " 2 $JD- " & VarGetType($JD) & @CRLF & " 3 $pl- " & VarGetType($pl) & @CRLF )
ConsoleWrite( " 4 $iflag- " & VarGetType($iflag) & @CRLF & " 5 $Plcc- " & VarGetType($Plcc) & @CRLF & " 6 $serr- " & VarGetType($serr) & @CRLF )
If @error or Not($result2) Then MsgBox(4096, "Error", "Error = " & @error)
ConsoleWrite('OK: ' & $x[0] & @CRLF & $result2[0] &@CR) ;
DllClose($Dll2)
EndFunc
Используется это функция так
Код:
Private Declare Function swe_calc_ut Lib "swedll32.dll" _
Alias "_swe_calc_ut@24" ( _
ByVal tjd_ut As Double, _
ByVal ipl As Long, _
ByVal iflag As Long, _
ByRef x As Double, _
ByVal serr As String _
) As Long ' x must be first of six array elements
' serr must be able to hold 256 bytes
Информация извлекается так (простой пример)
Private Sub Plc_Click()
Dim x(6) As Double
JD = 2456051.71277778
pl = 0
iflag = 260
serr$ = String(255, 0)
Call swe_calc_ut(JD, pl, iflag, x(0), serr$)
Label1.Caption = x(0)
For i =0 to 5
List1.Additem x(i)
Next i
DoEvents
End Sub
Про DLL
Код:
Имя функции в dll « _swe_calc_ut@24 » ( DLL Export Viewer )
The call parameters
int swe_calc_ut ( double tjd_ut, int ipl, int iflag, double* xx, char* serr),
where
tjd_ut =Julian day, Universal Time
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.