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; } }
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()); }