## Tcl8.6.17/Tk8.6.17 Documentation > [incr Tcl] Package C API, version 4.3.4 > RegisterC

### Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

  NAME
    Itcl_RegisterC, Itcl_RegisterObjC, Itcl_RegisterObjC2, Itcl_FindC, Itcl_FindC2 — C手続き函数を伴う象徴名を関連付ける　　Associate a symbolic name with a C procedure.
  SYNOPSIS
  引数 ARGUMENTS
    Tcl_Interp *interp (in)
    const char *cmdName (入力in)
    Tcl_CmdProc *argProc (入力in)
    Tcl_CmdProc **argProcPtr (入出力in/out)
    Tcl_ObjCmdProc *objProc (入力in)
    Tcl_ObjCmdProc2 *objProc2 (入力in)
    Tcl_ObjCmdProc **objProcPtr (入出力in/out)
    Tcl_ObjCmdProc2 **objProc2Ptr (入出力in/out)
    void *clientData (入力in)
    void **cDataPtr (入出力in/out)
    Tcl_CmdDeleteProc *deleteProc (入力in)
  説明 DESCRIPTION
  SEE ALSO
  KEYWORDS

### NAME

Itcl_RegisterC, Itcl_RegisterObjC, Itcl_RegisterObjC2, Itcl_FindC, Itcl_FindC2 — C手続き函数を伴う象徴名を関連付ける　　Associate a symbolic name with a C procedure.

### SYNOPSIS

#include <itcl.h>
int
Itcl_RegisterC(interp, cmdName, argProc, clientData, deleteProc)
int
Itcl_RegisterObjC(interp, cmdName, objProc, clientData, deleteProc)
int
Itcl_RegisterObjC2(interp, cmdName, objProc2, clientData, deleteProc)
int
Itcl_FindC(interp, cmdName, argProcPtr, objProcPtr, cDataPtr)
int
Itcl_FindC2(interp, cmdName, objProc2Ptr, cDataPtr)

### 引数 ARGUMENTS

Tcl_Interp *interp (in)
  中に新しい命令を生成すべき解釈実行機能｡　　　 Interpreter in which to create new command.

const char *cmdName (入力in)
  命令の名称｡　　　 Name of command.

Tcl_CmdProc *argProc (入力in)
  新命令の実装: 何時であれ argProc が呼出される　　　 Implementation of new command: argProc will be called whenever

Tcl_CmdProc **argProcPtr (入出力in/out)
  ポインターを受取るべきTcl_CmdProc * ｡ヌルもあり得る｡ 　　　　 The Tcl_CmdProc * to receive the pointer. Can be NULL.

Tcl_ObjCmdProc *objProc (入力in)
  新命令の実装: 何時であれ objProc が呼出される　　　　 Implementation of the new command: objProc will be called whenever

Tcl_ObjCmdProc2 *objProc2 (入力in)
  新命令の実装: 何時であれ objProc2 が呼出される　　　　 Implementation of the new command: objProc2 will be called whenever

Tcl_ObjCmdProc **objProcPtr (入出力in/out)
  ポインターを受取るべきTcl_ObjCmdProc * ｡　　 The Tcl_ObjCmdProc * to receive the pointer.

Tcl_ObjCmdProc2 **objProc2Ptr (入出力in/out)
  ポインターを受取るべき Tcl_ObjCmdProc2 * ｡　　　 The Tcl_ObjCmdProc2 * to receive the pointer.

void *clientData (入力in)
  proc と deleteProc に渡す為の任意の一語値｡　　　　 Arbitrary one-word value to pass to proc and deleteProc.

void **cDataPtr (入出力in/out)
  ポインターを受取るべき void *｡ 　　　 The void * to receive the pointer.

Tcl_CmdDeleteProc *deleteProc (入力in)
  解釈実行機能から cmdName が削除される前に呼ばれる手続函数; 命令固有のものを消去することを許容する｡もし NULL の場合､命令が除去される前に何も手続函数は呼ばれない｡　　　 Procedure to call before cmdName is deleted from the interpreter; allows for command-specific cleanup. If NULL, then no procedure is called before the command is deleted.

### 説明 DESCRIPTION

Tcl 命令を取扱う (argc,argv)の C 手続函数に､記号名を結合する為に使用される｡ この方法によって登録された手続函数は､手段/手続函数 として振舞う C 手続函数を指定する為の [incr Tcl] 級定義の本体内で参照することができる｡ 通常応用譜の開始時に Tcl_AppInit() 内で呼出されて､拡張の為の初期化業務で起動される｡　　　 Used to associate a symbolic name with an (argc,argv) C procedure that handles a Tcl command. Procedures that are registered in this manner can be referenced in the body of an [incr Tcl] class definition to specify C procedures to acting as methods/procs. Usually invoked in an initialization routine for an extension, called out in Tcl_AppInit() at the start of an application.

それぞれの記号名称の手続函数はそれに結合した任意依頼者データ値を有する｡ この値は､何時であれ起動された時に命令操作子に渡される｡ Each symbolic procedure can have an arbitrary client data value associated with it. This value is passed into the command handler whenever it is invoked.

記号の手続函数の名前は与えられた様式(引数/対象)操作子として一度だけ使うことができる｡ もし､名前が引数様式操作子として定義された場合､対象様式操作子として再定義でき､名前が対象様式操作子として定義された場合､引数様式操作子として再定義できる｡ 両方の場合､以前のどの依頼データも破棄され､新しい依頼データが記憶される｡但し､もし名前が同じ様式の異なる操作子に再定義された場合､この手続函数は不都合を返す｡ 　　　　 A symbolic procedure name can be used only once for a given style (arg/obj) handler. If the name is defined with an arg-style handler, it can be redefined with an obj-style handler; or if the name is defined with an obj-style handler, it can be redefined with an arg-style handler. In either case, any previous client data is discarded and the new client data is remembered. However, if a name is redefined to a different handler of the same style, this procedure returns an error.

成功すれば TCL_OK が返り､なにか悪い事がおこると (解釈実行機能->結果 内の不都合伝言文に従って) TCL_ERROR が返る｡　　　　 Returns TCL_OK on success, or TCL_ERROR (along with an error message in interp->result) if anything goes wrong.

C 言語手続函数は､手段や､手続函数や､公共変数の為の "config" 命令符号を実装する為の[incr Tcl] 級定義の中に集約できる｡ "@"で始まるどの本体も C 言語手続函数の為の記号名称として扱われる｡　　　 C procedures can be integrated into an [incr Tcl] class definition to implement methods, procs, and the "config" code for public variables. Any body that starts with "@" is treated as the symbolic name for a C procedure.

記号名称は Itcl_RegisterObjC() 経由の登録手続函数により確定される｡ これは通常､Tcl_AppInit() 手続函数の中で行われ､それは解釈実行機能が開始される時に自動的に呼出される｡ 次の実施例では､手続函数 My_FooObjCmd() は記号名 "foo" により登録される｡ この手続函数は body 命令の中で "@foo" として参照できる｡ Symbolic names are established by registering procedures via Itcl_RegisterObjC() or Itcl_RegisterObjC2() or Itcl_RegisterC(). This is usually done in the Tcl_AppInit() procedure, which is automatically called when the interpreter starts up. In the following example, the procedure `My_FooObjCmd()` is registered with the symbolic name "foo". This procedure can be referenced in the body command as "`@foo`".

    int
    Tcl_AppInit(interp)
        Tcl_Interp *interp;     /* Interpreter for application. */
    {
        if (Itcl_Init(interp) == TCL_ERROR) {
            return TCL_ERROR;
        }

        if (Itcl_RegisterObjC(interp, "foo", My_FooObjCmd) != TCL_OK) {
            return TCL_ERROR;
        }
    }

C 言語手続函数は､通常の Tcl 命令のように実装される｡詳細は CrtCommand 取扱説明書の頁を参照されたい｡手続函数の内部では､級データの要員は Tcl_SetVar() や Tcl_GetVar() や Tcl_TraceVar() 等を使用して通常の変数の様に利用できる｡級手段と手続函数は Tcl_Eval() を使用して通常の命令のように実行できる｡ [incr Tcl]はC 言語手続函数を実行する前に､この様な文脈を自動的の準備する｡ C procedures are implemented just like ordinary Tcl commands. See the CrtCommand man page for details. Within the procedure, class data members can be accessed like ordinary variables using Tcl_SetVar(), Tcl_GetVar(), Tcl_TraceVar(), etc. Class methods and procs can be executed like ordinary commands using Tcl_Eval(). [incr Tcl] makes this possible by automatically setting up the context before executing the C procedure.

この仕組みは符号命令開発の為の自然な移行経路を提供する｡級は本体を実装する為に Tcl 符号命令を使用して素早く開発できる｡応用譜全体が総機械語翻訳でき､試験できる｡ 必要な場合には､出来栄えの改良の為に､C 言語命令符号で個別の本体が実装される｡ 　　　 This scheme provides a natural migration path for code development. Classes can be developed quickly using Tcl code to implement the bodies. An entire application can be built and tested. When necessary, individual bodies can be implemented with C code to improve performance.

この C 連結手段が如何に使用されるかの実施例については､[incr Tk] 内の Archetype 級を参照されたい｡　　　 See the Archetype class in [incr Tk] for an example of how this C linking method is used.

### SEE ALSO

Tcl_CreateCommand, Tcl_CreateObjCommand

### KEYWORDS

class, object
Copyright © 1993-1998 Lucent Technologies, Inc.