:: 글답변 ::
Author
Password
E-mail
Homepage
Option
html
Topic
> > > Visual Basic-FORTRAN Mixed Programming > http://yoonc.tistory.com/4 > > 1. DLL(Dynamic Linked Library) 프로그래밍 > > (1) 프로그래밍 언어에서의 라이브러리(Library)라 함은 함수(Function)의 집합을 의미한다. > > 프로그램을 작성할 때 다음의 과정을 거친다. > > [프로그램 작성] --> [컴파일(Compile)단계] --> [링킹(Linking)단계] -- [바인딩(Binding)단계] > > 여기서 링킹단계는 사용한 라이브러리 함수, 참조하는 루틴을 서로 연결하고 실행에 필요한 정보를 덧붙여 실제로 실행가능한 코드를 생성한다. > > > > (2) 정적링크(Static Link)와 동적링크(Dynamic Link) > > - 정적링크 는 애플리케이션에서 사용한 라이브러리 루틴을 연결하는데 실제로 라이브러리 파일에서 필요한 루틴을 뽑아서 애플리케이션에 덧붙여 완전한 독립된 실행 파일을 만드는 것이다. > > - 동적링크 는 링크 과정에서 라이브러리의 코드를 실제로 애플리케이션에 덧붙이는 것이 아니라 단지 라이브러리와 어떻게 연결되어야 한다는 정보만을 덧붙이게 된다. 실제로 링크는 애플리케이션이 실행되는 순간 이루어진다. > > > > (3) DLL(Dynamic Linked Library)의 개념 > > DLL은 여러 개의 애플리케이션에서 동적으로, 즉 실행 과정 중에 연결하여 사용할 수 있는 라이브러리이다. > > DLL 파일을 사용하는 애플리케이션(.EXE)과는 별도로 생성되며, 저장되는 일종의 이진(Binary) 파일이며, 애플리케이션과 동적으로 링크되어서 사용된다. 또한 이러한 DLL 파일에는 여러 개의 모듈과 함수 그리고 리소스들을 포함할 수 있다. > > > > > > Fortran/Visual Basic Mixed-Language 프로그램 > > 1. Passing Arguments in Mixed-Language Programming > > By Value > By Reference > 예1) 포트란(Fortran)/비주얼베이직(Visua Basic) 예제 > > --- 포트란(Fortran)에서 DLL 생성 (Testproc.dll) --- > > SUBROUTINE Testproc (ValX, RefY) > !DEC$ ATTRIBUTES VALUE :: ValX > !DEC$ ATTRIBUTES REFERENCE :: RefY > > INTEGER ValX > INTEGER RefY > > ...... > > END SUBROUTINE > > --- 비주얼베이직에서 --- > > ' # 비주얼베이직 표준모듈에서 선언 # > > Declare Sub Testpoc Lib "Testproc" (ByVal ValX As Long, RefY As Long) > > > ' # 비주얼베이직 폼모듈에서 호출 # > > Dim ValX, RefY As Long > > Call Testproc(ValX, RefY) > > > > > > # Passing Arguments by Reference and Value > > 언어(Language) > > 참조에 의한 전달 > > 값에 의한 전달 > > Fortran Default VALUE > Visual Basic Default ByVal > > > 2. Mixed-Language 프로그램에서 데이터형의 조절 > > Fortran 데이터형 > > Visual Basic 데이터형 > > C 데이터형 > > INTEGER(1) --- char > INTEGER(2) Integer short > INTEGER(4) Long int, long > REAL(4) Single float > REAL(8) Double double > CHARACTER > > > > > 디지털 비주얼 포트란(Digital Visual Fortran)을 이용한 동적연결라이브러리(DLL) 만들기 > > 디지털 비주얼 포트란에서 > > (1) 새 프로젝트 생성 > > [File] --> [New] 를 클릭한다. > <Projects> 텝에서 [Fortran Dynamic Link Library]을 선택한 후, > 프로젝트가 생성되는 위치(location)를 조정하고 프로젝트명(Project Name) "Stat" 을 입력하고 [OK]를 클릭한다. > [An empty DLL application]을 선택하고 [Finish]를 클릭한 후 [OK]하면 빈 새프로젝트가 생성된다. > (2) 프로젝트에 Fortran 코드 추가 > > [Project] --> [Add to project] --> [New]를 클릭한다. > <Files> 텝에서 [Fortran Free Format Source File]를 선택한 후, > 파일명(File) "Descriptive"를 입력하고 [OK]를 클릭한다. > 다음의 서브루틴을 입력한다.(평균 구하기) > SUBROUTINE Average(Num, XData, Ave) > !DEC$ ATTRIBUTES DLLEXPORT :: Average > !DEC$ ATTRIBUTES ALIAS : 'Average' :: Average > > INTEGER, INTENT(IN) :: Num > REAL, INTENT(IN) :: XData(Num) > REAL, INTENT(OUT) :: Ave > > Ave=0.0 > DO i=1, Num > Ave = Ave + XData(i) > END DO > Ave = Ave/Num > > END SUBROUTINE > (3) DLL 생성 > > 컴파일(Compile) : [Build] --> [Compile descriptive.f90] > DLL 생성(Build dll) : [Build] --> [Build stat.dll] > 이 과정을 마치면 Fortran 프로젝트 폴더의 Debug 폴더에 "stat.dll" 파일이 생성되어있다. > > 비주얼 베이직에서 이 DLL 파일 "stat.dll"을 이용하면 된다. > > 비주얼베이직에서 DLL 이용하기 > > 비주얼베이직에서 > > (1) 새 프로젝트 새성 > > 폼에 버튼을 추가한다. > (2) DLL의 서브루틴 선언 > > 새 모듈을 추가한다. > 다음과 같이 서브루틴을 선언한다. > Declare Sub Descriptive Lib "Stat" (Num As Long, XData as Single, Ave as Single) > 주의1 : DLL에서 선언된 서브루틴명(Descriptive)과 데이터형이 동일해야 한다. > 주의2 : DLL 파일(Stat.dll)이 있는 폴더명을 명확히 표시한다. 표시되어 있지 않으면 Windows의 System32 폴더에서 DLL 파일이 있어야 한다. > (3) 폼 모듈에서 서브루틴을 호출 > > '버튼 클릭 이벤트 프로시저 > > Dim Num as Long > Dim XData() as Single > Dim Ave as Single > > ..... > > Call Descriptive(Num, XData(1), Ave) > > MsgBox "평균 : " & Ave >
Link #1
Link #2
Attach file
Type the letters shown in the left box..