Exemplo n.º 1
0
static void HspVarComobj_Free( PVal *pval )
{
	//		PVALポインタの変数メモリを解放する
	//
	IUnknown** ppunk;
	if ( pval->master ) {
		FreeDispParams( (ComDispParams *)pval->master );
	}
	if ( pval->mode == HSPVAR_MODE_MALLOC ) {
		// (一時変数に含まれるオブジェクトは Release しない)
		if ( (pval->support & HSPVAR_SUPPORT_TEMPVAR) == 0 ) {
#ifdef HSP_COMOBJ_DEBUG
			COM_DBG_MSG( "HspVarComobj_Free()\n" );
#endif
			int count = HspVarCoreCountElems( pval );
			ppunk = (IUnknown **)pval->pt;
			for (int i=0; i<count; i++) {
				ReleaseComPtr( &ppunk[i] );
			}
		}
		sbFree( pval->pt );
	}
	pval->pt   = NULL;
	pval->flag = HSPVAR_MODE_NONE;
}
Exemplo n.º 2
0
static void HspVarComobj_Alloc( PVal *pval, const PVal *pval2 )
{
	//		pval変数が必要とするサイズを確保する。
	//		(pvalがすでに確保されているメモリ解放は呼び出し側が行なう)
	//		(pval2がNULLの場合は、新規データ)
	//		(pval2が指定されている場合は、pval2の内容を継承して再確保)
	//
	int count,size;
	IUnknown **ppunk;
#ifdef HSP_COMOBJ_DEBUG
	COM_DBG_MSG( "HspVarComobj_Alloc()\n" );
#endif
	if ( pval->len[1] < 1 ) pval->len[1] = 1;		// 配列を最低 1 は確保する
	count = HspVarCoreCountElems(pval);
	size  = count * sizeof( IUnknown* );
	ppunk = (IUnknown **)sbAlloc( size );
	pval->mode = HSPVAR_MODE_MALLOC;
	for (int i=0; i<count; i++) { ppunk[i] = NULL; }
	if ( pval2 != NULL ) {
		memcpy( ppunk, pval->pt, pval->size );
		sbFree( pval->pt );
		if ( pval->master ) sbFree( pval->master );
	}
	pval->master = NULL;		// ComDispParams 用
	pval->pt = (char *)ppunk;
	pval->size = size;

}
Exemplo n.º 3
0
static int GetVarSize( PVal *pval )
{
	//		PVALポインタの変数が必要とするサイズを取得する
	//		(sizeフィールドに設定される)
	//
	return HspVarCoreCountElems(pval) * sizeof(int);
}