カスタム オペレータの場合、このコールバックはオペレータのインスタンスがインスタンス化されるときに発生します。 Define とは異なり、Init は新しく作成されたオペレータについても、ファイルからロードされたオペレータについても呼び出されます。
ユーザデータをInitコールバックのオペレータコンテキストに保存して、後から Update コールバックおよび Term コールバックで取得できます。 データは、単純な数値または文字列としても、COM オブジェクトまたは C++ オブジェクトとしても保存できます。
注 | Update が初めて呼び出されたときにキャッシュされたオペレータ データを初期化することもできますが、データの初期化は Init で実行することを強くお勧めします。 |
public class <operator_name> { public bool Init( Context in_context ) { ... } } |
CStatus <operator_name>_Init( CRef& in_context ) { ... } |
function <operator_name>_Init( in_context ) { ... } |
def <operator_name>_Init( in_context ): ... |
Function <filter_name>_Init( in_context ) ... End Function |
sub <operator_name>_Init { my $in_context = shift; } |
<operator_name>は、PluginRegistrar.RegisterOperator の呼び出しで指定されている名前です。この名前に含まれるスペースはアンダースコアに置き換えられます。
パラメータ | Language | タイプ | 説明 |
---|---|---|---|
in_context | スクリプティングおよび C# | コンテキスト | Context.Source は CustomOperator を返します。 |
C++ | CRef& | Context オブジェクトへのリファレンス。 Context::GetSource は CustomOperator を返します。 |
// Basic example SICALLBACK CppOp_Init( CRef& in_ctxt ) { Context ctxt( in_ctxt ); CustomOperator op( ctxt.GetSource() ); CString strOpNameAsUserData = op.GetUniqueName(); ctxt.PutUserData( strOpNameAsUserData ) ; return CStatus::OK ; } |
// Object Data class CData { LONG data; }; SICALLBACK CppOp_Init( CRef& in_ctxt ) { Context ctxt( in_ctxt ); CData* p = new CData; p->data = 123; CValue val = (CValue::siPtrType) p; ctxt.PutUserData( val ) ; return CStatus::OK ; } // Time to release memory SICALLBACK CppOp_Term( CRef& in_ctxt ) { Context ctxt( in_ctxt ); CValue val = in_ctxt.GetUserData(); CData* p = (CData*)(CValue::siPtrType)val; delete p; return CStatus::OK ; } |