이 글은 다음 게시물에서 첨부한 파일의 사용법입니다.
[프로그램 소스]행성의 위치를 계산(DE404)하는 DLL 파일
http://blueedu.dothome.co.kr/xe/815
아래 코드는 설명서에 있는 코드입니다.
이 소스 코드는 비주얼베이직 6에서 쓸 수 있습니다.
이 소스 코드에 있는 각각의 코드 블럭이 하는 역할에 대해 설명하겠습니다.
일단 전문을 나열하겠습니다.
Type TPlanetData
JD As Double
l As Double
b As Double
r As Double
ipla As Long
End Type
Declare Function Plan404 Lib "libplan404.dll" (pla As TPlanetData) As Long
Sub Main()
Dim pla As TPlanetData, i As Long
pla.ipla = 3
pla.JD = 2452305.5
i = Plan404(pla)
MsgBox "지구의 위치(JD 2452305.5 UT)" & VbCrLf & _
"황경: " & pla.l & "(rad)" & VbCrLf & _
"황위: " & pla.b & "(rad)" & VbCrLf & _
"거리: " & pla.r & "(AU)"
End Sub
이 코드는 전반적으로 구조체 선언부, DLL 선언부, Main() 함수 부분으로 이루어져 있습니다. 각각의 코드 블럭을 살펴보도록 하겠습니다.
Type TPlanetData
JD As Double
l As Double
b As Double
r As Double
ipla As Long
End Type
이 코드는 프로그램에서 쓰는 구조체를 선언하는 부분입니다. DE404 DLL 파일에서 자료를 입력받고 출력할 때 이런 형식의 구조체를 쓰고 있으므로 비주얼베이직에서도 그에 맞추어 구조체를 만들어주어야합니다. 각각의 구성요소는 다음 자료를 주고 받습니다.
JD: 위치를 계산하려는 시각 자료를 DE404 DLL 파일에 알려줍니다. 율리우스 적일로 입력합니다(입력).
ipla: 위치를 계산하려는 천체를 지정합니다(입력).
l: 입력받은 시각의 행성의 일심 황경을 출력합니다(출력 단위: 라디안).
b: 입력받은 시각의 행성의 일심 황위를 출력합니다(출력 단위: 라디안).
r: 입력받은 시각의 행성의 거리(태양-행성간 거리)를 출력합니다(출력 단위: 천문단위).
(주의: 행성은 태양 중심의 위치를 츨력하지만 달은 지구 중심의 황도좌표, 거리를 출력합니다. )
다음 부분입니다.
Declare Function Plan404 Lib "libplan404.dll" (pla As TPlanetData) As Long
이 코드는 DLL 파일에 있는 함수를 쓰겠다고 프로그램 언어에 알려주는 역할을 합니다.
libplan404.dll 파일에 있는 Plan404 함수를 쓰고 TPlanetData 형식의 변수를 매개변수로 쓰겠다고 명시해 놓았습니다.
한가지 주의할 부분이 있는데, Lib 바로 뒤에 이어지는 "libplan404.dll"는 DLL 파일의 경로와 이름을 지정해 주는 부분입니다. 비주얼베이직 IDE 환경에서 아무런 문제없이 작업하려면 libplan404.dll 파일을 윈도우즈의 시스펨 폴더에 복사해두거나 libplan404.dll 파일이 있는 전체 경로를 적어주어야합니다. 컴파일 된 프로그램을 실행할 때에는 프로그램 파일과 같은 폴더에 libplan404.dll 파일이 있으면 됩니다.
다음 부분으로 넘어갑니다.
이 부분은 Main 함수 부분입니다. 이 함수는 프로그램이 시작되면 처음으로 실행하는 함수입니다. 설명은 주석문으로 대신합니다.
Sub Main()
Dim pla As TPlanetData 'Plan404 함수를 호출할 때에 쓸 변수를 선언합니다.Dim i As Long 'Plan404 함수의 반환값을 받을 변수입니다.
pla.ipla = 3 '계산할 천체를 지구로 정합니다.
pla.JD = 2452305.5 '계산할 시점을 2452305.5로 정합니다.
i = Plan404(pla) 'Plan404 함수를 호출합니다.
'메세지 박스에서 계산 결과를 출력합니다.
MsgBox "지구의 위치(JD 2452305.5 UT)" & VbCrLf & _
"황경: " & pla.l & "(rad)" & VbCrLf & _
"황위: " & pla.b & "(rad)" & VbCrLf & _
"거리: " & pla.r & "(AU)"
End Sub