Nim에서 처음으로 GUI

8805 단어 IUPNimbleNimWindows10
Nim 언어의 사용 폭을 넓히기 위해 GUI 애플리케이션을 작성해 보겠습니다.

왜 님



네이밍, HP의 분위기, 언어 기술 등이 전체적으로 좋아.
Go, Rust 등도 조금만 만졌습니다만, 이엔의 비교 기사등도 포함해 Nim 좋다-라고 생각하고 있습니다.

Nim을 실행할 때까지


Windows : 10nim : 0.18.0MinGW : 6.3.0
여기까지는 통상의 Nim의 개발 환경입니다. 이 페이지에 따라 쉽게 구성할 수 있습니다.
h tps://에 m-ㅁ g. rg/인 s단 l_우동 ws. HTML

GUI를 만드는 환경



사용할 라이브러리: IUP



Nim에서 GUI를 만들려면 IUP 이라는 GUI 라이브러리를 사용합니다.

이 IUP는 Nim에 한정된 GUI 라이브러리가 아니고, 원래 Lua 등, C를 중심으로 한 빌드 환경에서 멀티 플랫폼으로 네이티브 GUI를 개발하기 위한 라이브러리인 것 같습니다.

일단 Nim을 빌드하면 알겠지만, C에 트랜스파일(이라고 말해도 좋을까) 되고 나서 빌드되기 때문에, IUP를 사용할 수 있다고 하는 것이군요.

※더 자세한 사람, 가르쳐 주세요. . .

IUP를 가져다



다음 위치에 IUP 라이브러리가 있습니다.
h tps://그래서 r세훗r게. 네 t/p 로지ぇcts/이른 p/후우 s/

이 시점에서 최신 버전인 3.24를 선택합니다.

Windows64bit+MinGW에 해당하는 IUP 라이브러리를 다운로드합니다.
h tps://그래서 r세훗r게. 네 t/p 로지ぇcts/이른 p/후우 s/3. . 지 p / 도 w 응 아 d

다운로드한 ZIP을 해동하면 다음과 같은 내용이 됩니다.


.a 파일은 링커가 사용하는 바이너리이므로, 이것을 MinGW(gcc)에 건네주면, 사용할 수 있을 것 같네요.

Nim에서 IUP를 호출할 수 있도록 허용



Nim 코드 내에서 IUP 라이브러리를 호출해야합니다.
그것에는 공식 IUP 래퍼가 있기 때문에 그것을 사용합니다.

README에 따라 다음 명령으로 설치합니다.
$ nimble install iup

이것으로 환경 준비가 완료되었습니다. 드디어 프로그램을 만듭니다.

IUP 프로그램



마찬가지로 IUP 래퍼의 Github에 샘플이 있으므로 그것을 사용해 보겠습니다.


menu.nim
import iup

discard iup.open(nil, nil)

var fileItemLoad = iup.item("Load", "")
var fileItemSave = iup.item("Save", "")
var fileItemClose = iup.item("Close", "")

var fileMenu = iup.menu(fileItemLoad, fileItemSave, fileItemClose, nil)
var mainMenu = iup.menu(iup.subMenu("File", fileMenu), nil)

discard iup.setHandle("mainMenu", mainMenu)

var dlg = iup.dialog(nil)
iup.setAttribute(dlg, "TITLE", "iupTabs")
iup.setAttribute(dlg, "SIZE", "200x100")
iup.setAttribute(dlg, "MENU", "mainMenu")

discard iup.showXY(dlg, IUP_CENTER, IUP_CENTER)
discard iup.mainLoop()

iup.close()

IUP 라이브러리를 이번에는 프로젝트 폴더의 iup 폴더에 넣습니다.
다음과 같은 구성이 됩니다.



그럼 빌드를 해보자.
$ nim c -d:release --dynlibOverride:iup -L:iup/libiup.a -L:iup/libiupcd.a -L:iup/libiupim.a -L:-lgdi32 -L:-luser32 -L:-lcomdlg32 -L:-lcomctl32 -L:-lole32 -L:-luuid menu.nim

이것은 Nim에서 C로 트랜스파일된 뒤, 다음과 같은 컴파일이 내부에서 행해지고 있습니다.
gcc.exe -o C:\○○○\menu.exe  C:\○○○\nimcache\menu.o C:\○○○\nimcache\stdlib_system.o C:\○○○\nimcache\stdlib_iup.o  iup/libiup.a iup/libiupcd.a iup/libiupim.a -lgdi32 -luser32 -lcomdlg32 -lcomctl32 -lole32 -luuid

32라고 붙어 있는 것은 전부 Win32의 라이브러리군요. 활기차지만 ...
gdi32 : 화면 그리기user32 : 사용자 주변?comdlg32 : 공통 대화상자comctl32 : 공통 컨트롤(버튼이라든가?)ole32 : 링커? ( htps : // 그럼.ぃきぺぢ아. 오 rg / ぃき / 오 b ぇ ct_ ぃ き ん g_ an d_ 에 m 베 ぢ g )uuid : UUID (무엇에 사용하고 있습니까?)

※자세한 사람, 가르쳐 주세요. . .

우선 이것으로 exe를 할 수 있다고 생각하므로 실행해 봅시다.


:*:・。,☆゚'・:*:・。,ヽ(・NIM・)人(・IUP・)ノ ,。・:*:・゚'☆,。・:*:
했어!

앞으로 하고 싶은 일


  • nim.cfg를 사용하여 명령을 줄이려면
  • IUP 라이브러리를 프로젝트 폴더가 아닌 MinGW 쪽으로 이동 (빌드 환경에 따라 다르므로 ...)
  • 기타 플랫폼에서 빌드


  • Nim 이칸센 실제의 빌드 주위의 정보가 전혀 발견되지 않아 괴롭기 때문에, 여러분도 꼭 정보 공유해 주세요!

    원래 C 빌드에 대해서도 공부해야 합니다만. . . orz

    좋은 웹페이지 즐겨찾기