示例#1
0
void LuaListenPre::PutVariantToLuaStack(VARIANT* pv, lua_State* luaState)
{
	switch(pv->vt)
	{
	case VT_I2:
		// 潜规则:一律认为是VARIANT_BOOL
		lua_pushboolean(luaState, (pv->iVal == 0)?0:1);
		break;		
	case VT_UI1:
	case VT_I1:
	case VT_UI2:
	case VT_UINT:
	case VT_INT:
	case VT_UI4:
	case VT_I4:
		lua_pushinteger(luaState,pv->intVal);
		break;
	case VT_BSTR:
		{
			std::string str;
			BSTRToLuaString(pv->bstrVal,str);
			lua_pushlstring(luaState, str.c_str(), str.length());
		}				
		break;
	case VT_PTR:
		lua_pushlightuserdata(luaState, pv->pvRecord);
		break;
	case VT_BOOL:
		lua_pushboolean(luaState, (pv->boolVal == VARIANT_FALSE) ? 0 : 1 );
		break;
	default:
		lua_pushnil(luaState);
		break;
	}
}
示例#2
0
void LuaPush(lua_State* L, const wchar_t* val)
{
	std::string strValueUtf8;
	wchar_t szValue[MAX_PATH] = {0};
	wcscpy(szValue,val);
	BSTRToLuaString(szValue,strValueUtf8);
	lua_pushstring(L, strValueUtf8.c_str());
}