Windows에서 gcc에서 C 언어로 쉽게 GUI (Tcl/Tk)

11474 단어 GUITkCTcl

소개



직장에서 조금 툴 만들고 싶지만, 사용하는 사람도 생각해 GUI로 하고 싶다, C언어로 짜고 싶은, 라이센스라든지 생각하고 gcc로 만들고 싶다, 라이브러리 여러가지 기억하고 싶지 않은, 그런 때에 살짝 사용할 수 있는 순서입니다

MinGW 설치



왼쪽의 "download/installer"에서 설치 프로그램을 얻을 수 있습니다.
실행 및 설치.

설치 후 Installation Manager
왼쪽의 기본 설정을 선택합니다.
  • mingw32-base-bin
  • mingw32-gcc-g++-bin

  • 을 클릭하여 Mark

    왼쪽 All Packages → MinGW → MinGW Contributed를 선택합니다.
  • mingw32-tcl-bin
  • mingw32-tk-bin

  • 을 클릭하여 Mark

    왼쪽 상단의 Installation
    Apply Changes
    에서 설치 수행

    MinGW에 PATH 통과



    시스템의 PATH에 C:\MinGW\bin을 등록합니다.

    이 기사 등 참고로 부디

    Windows10에서 실행 파일의 경로를 통과하는 단계
    htps : // 코 m / 슈헤 y / ms / 7 예 0d25f14 997c9 285

    소스 만들기



    적절한 폴더에 다음과 같이 만듭니다.

    C 언어의 소스는 다음과 같습니다.

    main.c
    /*
     * These codes are licensed under CC0.
     * http://creativecommons.org/publicdomain/zero/1.0/deed.ja
     */
    #include <tcl.h>
    #include <tk.h>
    
    //独自コマンドの作成
    int proc(ClientData clientData, Tcl_Interp* interp, int argc, const char* argv[])
    {
        //argc:引数の数
        //argv[0]:自分自身(コマンド名)
        //argv[1]~:引数
    
        if ( argc != 1 )
        {
            char *retmsg = "argument error";
            Tcl_SetResult(interp, retmsg, TCL_VOLATILE);
            return TCL_ERROR;
        }
        printf("Call!\n");
    
        char *retvalue = "0";
        Tcl_SetResult(interp, retvalue, TCL_VOLATILE);
        return TCL_OK;
    
        //終了コードの種類
        //TCL_OK、TCL_ERROR、 TCL_RETURN、TCL_BREAK、またはTCL_CONTINUE
    
        //応答の種類
        //TCL_STATIC ... データが静的な領域(static char)にあって、関数を抜けてもその領域が上書きされない場合
        //TCL_VOLATILE ... データが揮発する(auto char)スタック領域にあり、関数を抜けると上書きされる場合
        //TCL_DYNAMIC ... データがAPI Tcl_Allocで確保された領域にある場合
    }
    
    int main(int argc, char* argv[])
    {
        Tcl_Interp *interp = Tcl_CreateInterp(); //インタプリタを作成
        Tcl_FindExecutable(argv[0]); //初期化前準備
        if ( Tcl_Init(interp) == TCL_ERROR ) //Tclを初期化(スタンダートライブラリinit.tclをロード)
        {
            const char *errmsg = Tcl_GetStringResult(interp); //エラーメッセージの取得
            printf("インタプリタの初期化に失敗: %s\n",errmsg);
            return -1;
        }
        if ( Tk_Init(interp) == TCL_ERROR ) //Tkを初期化(GUIライブラリをロード)
        {
            const char *errmsg = Tcl_GetStringResult(interp); //エラーメッセージの取得
            printf("GUIライブラリの初期化に失敗: %s\n", errmsg);
            return -1;
        }
    
        //コマンドを作る
        Tcl_CreateCommand(interp,"testproc",proc,NULL,NULL);
    
        if ( Tcl_EvalFile(interp, "script.tcl") == TCL_ERROR )//インタプリタで実行
        {
            const char *errmsg = Tcl_GetStringResult(interp); //エラーメッセージの取得
            printf("実行失敗: エラー内容:%s\n", errmsg);
            return -1;
        }else{
            const char *errmsg = Tcl_GetStringResult(interp); //エラーメッセージの取得
            printf("実行成功:%s\n", errmsg);
        }
    
        Tk_MainLoop();//Tkのイベントループへ
    
        Tcl_DeleteInterp(interp); //インタプリタのお片付け
        return 0;
    }
    

    TCL 언어의 소스는 다음과 같습니다. (GUI 정의 파일과 같은 것으로 생각하십시오)

    script.tcl
    button .b1 -text "Hello World" -command {puts "Hello World"}
    button .b2 -text "Call proc" -command {testproc}
    pack .b1 .b2
    

    컴파일하다



    소스가 있는 폴더에서 명령 프롬프트를 열고 다음을 수행합니다.
    gcc main.c -o test.exe -ltcl86 -ltk86
    

    실행하다



    test.exe를 실행합니다.
    위의 버튼을 누르면 Hello World가 표시되고,
    아래 버튼을 누르면 C 언어의 proc 함수가 실행됩니다.



    배포 시 주의



    언뜻 보면 EXE 파일과 TCL 파일로 작동하는 것처럼 보이지만 실제로는 MinGW 폴더의 파일에 의존합니다.
    배포하려면 다음과 같은 폴더 구성으로 배포하십시오.
    配布フォルダ
    ├─bin
    |  ├─test.exe
    |  ├─script.tcl
    |  ├─libgcc_s_dw2-1.dll ←C:\MinGW\binにあるファイル
    |  ├─tcl86.dll ←C:\MinGW\binにあるファイル
    |  └─tk86.dll ←C:\MinGW\binにあるファイル
    └─lib
        ├─tcl8.6 ←C:\MinGW\libにあるフォルダ
        └─tk8.6 ←C:\MinGW\libにあるフォルダ
    

    Tcl/tk 라이선스에도 주의하십시오.
    htps //w w. tcl. tk/그 f와 ぁれ/tcltk/〃센세. HTML

    결론



    Tcl/Tk는 외형은 소박하지만 꽤 쉽게 GUI가 쓸 수 있는 툴킷&언어입니다.
    C 언어에 내장되는 전제로 만들어져 있기 때문에 이렇게 쉽게 사용할 수 있습니다.

    TCL 언어 자체의 사용법에 대해서는 아래 등을 참조하십시오.

    Tcl/Tk GUI Programming
    h tp // w w. 응 ct9. 네. jp/m_히로이/tcl_tk. HTML

    Tcl/Tk 추천
    htps : // / s. 오, ぇ. 이 m / 해 / gps 미안해 jp / tcl tk / tcl tk의 스스메

    Tcl/tk 간단한 참조
    htps : // / s. 오, ぇ. 코 m / 해 / gps 뭉아

    Tcl/Tk로 Windows 프로그래밍
    h tp // 우우 b. 아 r ゔ ぇ. rg/우ぇb/20160116031827/htp // 칭찬 3. 에 fty. 이 m/카쿠짱/tcl_tk/이어서 x. HTML

    좋은 웹페이지 즐겨찾기