本文整理汇总了C++中Utf8Str类的典型用法代码示例。如果您正苦于以下问题:C++ Utf8Str类的具体用法?C++ Utf8Str怎么用?C++ Utf8Str使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Utf8Str类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: init
/**
* Initializes the bandwidth group object.
*
* @returns COM result indicator.
* @param aParent Pointer to our parent object.
* @param aName Name of the bandwidth group.
* @param aType Type of the bandwidth group (net, disk).
* @param aMaxBytesPerSec Maximum bandwidth for the bandwidth group.
*/
HRESULT BandwidthGroup::init(BandwidthControl *aParent,
const Utf8Str &aName,
BandwidthGroupType_T aType,
LONG64 aMaxBytesPerSec)
{
LogFlowThisFunc(("aParent=%p aName=\"%s\"\n",
aParent, aName.c_str()));
ComAssertRet(aParent && !aName.isEmpty(), E_INVALIDARG);
if ( (aType <= BandwidthGroupType_Null)
|| (aType > BandwidthGroupType_Network))
return setError(E_INVALIDARG,
tr("Invalid bandwidth group type type"));
/* Enclose the state transition NotReady->InInit->Ready */
AutoInitSpan autoInitSpan(this);
AssertReturn(autoInitSpan.isOk(), E_FAIL);
m = new Data(aParent);
/* m->pPeer is left null */
m->bd.allocate();
m->bd->strName = aName;
m->bd->enmType = aType;
m->bd->cReferences = 0;
m->bd->aMaxBytesPerSec = aMaxBytesPerSec;
/* Confirm a successful initialization */
autoInitSpan.setSucceeded();
return S_OK;
}
开发者ID:jeppeter,项目名称:vbox,代码行数:43,代码来源:BandwidthGroupImpl.cpp
示例2: setAutostartDatabasePath
HRESULT SystemProperties::setAutostartDatabasePath(const Utf8Str &aPath)
{
HRESULT rc = S_OK;
AutostartDb *autostartDb = this->mParent->getAutostartDb();
if (!aPath.isEmpty())
{
/* Update path in the autostart database. */
int vrc = autostartDb->setAutostartDbPath(aPath.c_str());
if (RT_SUCCESS(vrc))
m->strAutostartDatabasePath = aPath;
else
rc = setError(E_FAIL,
tr("Cannot set the autostart database path (%Rrc)"),
vrc);
}
else
{
int vrc = autostartDb->setAutostartDbPath(NULL);
if (RT_SUCCESS(vrc) || vrc == VERR_NOT_SUPPORTED)
m->strAutostartDatabasePath = "";
else
rc = setError(E_FAIL,
tr("Deleting the autostart database path failed (%Rrc)"),
vrc);
}
return rc;
}
开发者ID:greg100795,项目名称:virtualbox,代码行数:29,代码来源:SystemPropertiesImpl.cpp
示例3: CheckComArgOutPointerValid
STDMETHODIMP SharedFolder::COMGETTER(Accessible) (BOOL *aAccessible)
{
CheckComArgOutPointerValid(aAccessible);
AutoCaller autoCaller(this);
if (FAILED(autoCaller.rc())) return autoCaller.rc();
/* mName and mHostPath are constant during life time, no need to lock */
/* check whether the host path exists */
Utf8Str hostPath = m->strHostPath;
char hostPathFull[RTPATH_MAX];
int vrc = RTPathExists(hostPath.c_str()) ? RTPathReal(hostPath.c_str(),
hostPathFull,
sizeof(hostPathFull))
: VERR_PATH_NOT_FOUND;
if (RT_SUCCESS(vrc))
{
*aAccessible = TRUE;
return S_OK;
}
AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
m->strLastAccessError = Utf8StrFmt(tr("'%s' is not accessible (%Rrc)"),
m->strHostPath.c_str(),
vrc);
LogWarningThisFunc(("m.lastAccessError=\"%s\"\n", m->strLastAccessError.c_str()));
*aAccessible = FALSE;
return S_OK;
}
开发者ID:gvsurenderreddy,项目名称:VirtualBox-OSE,代码行数:33,代码来源:SharedFolderImpl.cpp
示例4: init
/**
* Initializes the USB controller object.
*
* @returns COM result indicator.
* @param aParent Pointer to our parent object.
* @param aName The name of the USB controller.
* @param enmType The USB controller type.
*/
HRESULT USBController::init(Machine *aParent, const Utf8Str &aName, USBControllerType_T enmType)
{
LogFlowThisFunc(("aParent=%p aName=\"%s\"\n", aParent, aName.c_str()));
ComAssertRet(aParent && !aName.isEmpty(), E_INVALIDARG);
if ( (enmType <= USBControllerType_Null)
|| (enmType > USBControllerType_XHCI))
return setError(E_INVALIDARG,
tr("Invalid USB controller type"));
/* Enclose the state transition NotReady->InInit->Ready */
AutoInitSpan autoInitSpan(this);
AssertReturn(autoInitSpan.isOk(), E_FAIL);
m = new Data(aParent);
/* mPeer is left null */
m->bd.allocate();
m->bd->strName = aName;
m->bd->enmType = enmType;
/* Confirm a successful initialization */
autoInitSpan.setSucceeded();
return S_OK;
}
开发者ID:miguelinux,项目名称:vbox,代码行数:35,代码来源:USBControllerImpl.cpp
示例5: GluePrintRCMessage
void GluePrintRCMessage(HRESULT rc)
{
Utf8Str str = Utf8StrFmt("Code %Rhra (extended info not available)\n", rc);
// print and log
RTMsgError("%s", str.c_str());
Log(("ERROR: %s", str.c_str()));
}
开发者ID:LastRitter,项目名称:vbox-haiku,代码行数:7,代码来源:errorprint.cpp
示例6: autoInitSpan
/**
* VFSExplorer COM initializer.
* @param
* @return
*/
HRESULT VFSExplorer::init(VFSType_T aType, Utf8Str aFilePath, Utf8Str aHostname, Utf8Str aUsername,
Utf8Str aPassword, VirtualBox *aVirtualBox)
{
/* Enclose the state transition NotReady->InInit->Ready */
AutoInitSpan autoInitSpan(this);
AssertReturn(autoInitSpan.isOk(), E_FAIL);
/* Weak reference to a VirtualBox object */
unconst(mVirtualBox) = aVirtualBox;
/* initialize data */
m = new Data;
m->storageType = aType;
m->strPath = aFilePath;
m->strHostname = aHostname;
m->strUsername = aUsername;
m->strPassword = aPassword;
if (m->storageType == VFSType_S3)
{
size_t bpos = aFilePath.find("/", 1);
if (bpos != Utf8Str::npos)
{
m->strBucket = aFilePath.substr(1, bpos - 1); /* The bucket without any slashes */
aFilePath = aFilePath.substr(bpos); /* The rest of the file path */
}
}
/* Confirm a successful initialization */
autoInitSpan.setSucceeded();
return S_OK;
}
开发者ID:svn2github,项目名称:virtualbox,代码行数:39,代码来源:VFSExplorerImpl.cpp
示例7: LogFlowThisFunc
int GuestDirectory::init(GuestSession *aSession,
const Utf8Str &strPath, const Utf8Str &strFilter /*= ""*/, uint32_t uFlags /*= 0*/)
{
LogFlowThisFunc(("strPath=%s, strFilter=%s, uFlags=%x\n",
strPath.c_str(), strFilter.c_str(), uFlags));
/* Enclose the state transition NotReady->InInit->Ready. */
AutoInitSpan autoInitSpan(this);
AssertReturn(autoInitSpan.isOk(), E_FAIL);
mData.mSession = aSession;
mData.mName = strPath;
mData.mFilter = strFilter;
mData.mFlags = uFlags;
/* Start the directory process on the guest. */
GuestProcessStartupInfo procInfo;
procInfo.mName = Utf8StrFmt(tr("Reading directory \"%s\"", strPath.c_str()));
procInfo.mCommand = Utf8Str(VBOXSERVICE_TOOL_LS);
procInfo.mTimeoutMS = 0; /* No timeout. */
procInfo.mFlags = ProcessCreateFlag_Hidden | ProcessCreateFlag_WaitForStdOut;
procInfo.mArguments.push_back(Utf8Str("--machinereadable"));
/* We want the long output format which contains all the object details. */
procInfo.mArguments.push_back(Utf8Str("-l"));
#if 0 /* Flags are not supported yet. */
if (uFlags & DirectoryOpenFlag_NoSymlinks)
procInfo.mArguments.push_back(Utf8Str("--nosymlinks")); /** @todo What does GNU here? */
#endif
/** @todo Recursion support? */
procInfo.mArguments.push_back(strPath); /* The directory we want to open. */
/*
* Start the process asynchronously and keep it around so that we can use
* it later in subsequent read() calls.
*/
ComObjPtr<GuestProcess> pProcess;
int rc = mData.mSession->processCreateExInteral(procInfo, pProcess);
if (RT_SUCCESS(rc))
rc = pProcess->startProcessAsync();
LogFlowThisFunc(("rc=%Rrc\n", rc));
if (RT_SUCCESS(rc))
{
mData.mProcess = pProcess;
/* Confirm a successful initialization when it's the case. */
autoInitSpan.setSucceeded();
return rc;
}
autoInitSpan.setFailed();
return rc;
}
开发者ID:gvsurenderreddy,项目名称:VirtualBox-OSE,代码行数:55,代码来源:GuestDirectoryImpl.cpp
示例8: DECLCALLBACK
/** VM IPC mutex holder thread */
DECLCALLBACK(int) IPCMutexHolderThread (RTTHREAD Thread, void *pvUser)
{
LogFlowFuncEnter();
Assert (pvUser);
void **data = (void **) pvUser;
Utf8Str ipcId = (BSTR)data[0];
RTSEMEVENT finishSem = (RTSEMEVENT)data[1];
LogFlowFunc (("ipcId='%s', finishSem=%p\n", ipcId.raw(), finishSem));
HMTX ipcMutex = NULLHANDLE;
APIRET arc = ::DosOpenMutexSem ((PSZ) ipcId.raw(), &ipcMutex);
AssertMsg (arc == NO_ERROR, ("cannot open IPC mutex, arc=%ld\n", arc));
if (arc == NO_ERROR)
{
/* grab the mutex */
LogFlowFunc (("grabbing IPC mutex...\n"));
arc = ::DosRequestMutexSem (ipcMutex, SEM_IMMEDIATE_RETURN);
AssertMsg (arc == NO_ERROR, ("cannot grab IPC mutex, arc=%ld\n", arc));
if (arc == NO_ERROR)
{
/* store the answer */
data[2] = (void*)true;
/* signal we're done */
int vrc = RTThreadUserSignal (Thread);
AssertRC(vrc);
/* wait until we're signaled to release the IPC mutex */
LogFlowFunc (("waiting for termination signal..\n"));
vrc = RTSemEventWait (finishSem, RT_INDEFINITE_WAIT);
Assert (arc == ERROR_INTERRUPT || ERROR_TIMEOUT);
/* release the IPC mutex */
LogFlowFunc (("releasing IPC mutex...\n"));
arc = ::DosReleaseMutexSem (ipcMutex);
AssertMsg (arc == NO_ERROR, ("cannot release mutex, arc=%ld\n", arc));
}
::DosCloseMutexSem (ipcMutex);
}
/* store the answer */
data[1] = (void*)false;
/* signal we're done */
int vrc = RTThreadUserSignal (Thread);
AssertRC(vrc);
LogFlowFuncLeave();
return 0;
}
开发者ID:quiquetux,项目名称:jokte-ba-as,代码行数:55,代码来源:SessionImpl.cpp
示例9: readSavedGuestSize
int readSavedGuestSize(const Utf8Str &strStateFilePath, uint32_t u32ScreenId, uint32_t *pu32Width, uint32_t *pu32Height)
{
LogFlowFunc(("u32ScreenId = %d [%s]\n", u32ScreenId, strStateFilePath.c_str()));
/* @todo cache read data */
if (strStateFilePath.isEmpty())
{
/* No saved state data. */
return VERR_NOT_SUPPORTED;
}
uint32_t u32Width = 0;
uint32_t u32Height = 0;
PSSMHANDLE pSSM;
int vrc = SSMR3Open(strStateFilePath.c_str(), 0 /*fFlags*/, &pSSM);
if (RT_SUCCESS(vrc))
{
uint32_t uVersion;
vrc = SSMR3Seek(pSSM, "DisplayData", 0 /*iInstance*/, &uVersion);
if (RT_SUCCESS(vrc))
{
/* Only the second version is supported. */
if ( uVersion == sSSMDisplayVer2
|| uVersion == sSSMDisplayVer3)
{
uint32_t cMonitors;
SSMR3GetU32(pSSM, &cMonitors);
if (u32ScreenId > cMonitors)
vrc = -2;
else
{
/* Skip all previous monitors and the first 3 entries. */
SSMR3Skip(pSSM, u32ScreenId * 5 * sizeof(uint32_t) + 3 * sizeof(uint32_t));
SSMR3GetU32(pSSM, &u32Width);
SSMR3GetU32(pSSM, &u32Height);
}
}
}
SSMR3Close(pSSM);
}
if (RT_SUCCESS(vrc))
{
*pu32Width = u32Width;
*pu32Height = u32Height;
}
LogFlowFunc(("vrc %Rrc\n", vrc));
return vrc;
}
开发者ID:LastRitter,项目名称:vbox-haiku,代码行数:52,代码来源:DisplayUtils.cpp
示例10: GluePrintErrorContext
void GluePrintErrorContext(const char *pcszContext, const char *pcszSourceFile, uint32_t ulLine)
{
// pcszSourceFile comes from __FILE__ macro, which always contains the full path,
// which we don't want to see printed:
Utf8Str strFilename(RTPathFilename(pcszSourceFile));
Utf8Str str = Utf8StrFmt("Context: \"%s\" at line %d of file %s\n",
pcszContext,
ulLine,
strFilename.c_str());
// print and log
RTMsgError("%s", str.c_str());
Log(("%s", str.c_str()));
}
开发者ID:LastRitter,项目名称:vbox-haiku,代码行数:13,代码来源:errorprint.cpp
示例11: GluePrintErrorInfo
void GluePrintErrorInfo(const com::ErrorInfo &info)
{
bool haveResultCode = false;
#if defined (RT_OS_WIN)
haveResultCode = info.isFullAvailable();
bool haveComponent = true;
bool haveInterfaceID = true;
#else /* defined (RT_OS_WIN) */
haveResultCode = true;
bool haveComponent = info.isFullAvailable();
bool haveInterfaceID = info.isFullAvailable();
#endif
Utf8Str str;
RTCList<Utf8Str> comp;
Bstr bstrDetailsText = info.getText();
if (!bstrDetailsText.isEmpty())
str = Utf8StrFmt("%ls\n",
bstrDetailsText.raw());
if (haveResultCode)
comp.append(Utf8StrFmt("code %Rhrc (0x%RX32)",
info.getResultCode(),
info.getResultCode()));
if (haveComponent)
comp.append(Utf8StrFmt("component %ls",
info.getComponent().raw()));
if (haveInterfaceID)
comp.append(Utf8StrFmt("interface %ls",
info.getInterfaceName().raw()));
if (!info.getCalleeName().isEmpty())
comp.append(Utf8StrFmt("callee %ls",
info.getCalleeName().raw()));
if (comp.size() > 0)
{
str += "Details: ";
for (size_t i = 0; i < comp.size() - 1; ++i)
str += comp.at(i) + ", ";
str += comp.last();
str += "\n";
}
// print and log
RTMsgError("%s", str.c_str());
Log(("ERROR: %s", str.c_str()));
}
开发者ID:LastRitter,项目名称:vbox-haiku,代码行数:47,代码来源:errorprint.cpp
示例12: setDefaultHardDiskFormat
HRESULT SystemProperties::setDefaultHardDiskFormat(const Utf8Str &aFormat)
{
if (!aFormat.isEmpty())
m->strDefaultHardDiskFormat = aFormat;
else
m->strDefaultHardDiskFormat = "VDI";
return S_OK;
}
开发者ID:greg100795,项目名称:virtualbox,代码行数:9,代码来源:SystemPropertiesImpl.cpp
示例13: while
size_t Utf8Str::parseKeyValue(Utf8Str &key, Utf8Str &value, size_t pos, const Utf8Str &pairSeparator, const Utf8Str &keyValueSeparator) const
{
size_t start = pos;
while(start == (pos = find(pairSeparator.c_str(), pos)))
start = ++pos;
size_t kvSepPos = find(keyValueSeparator.c_str(), start);
if (kvSepPos < pos)
{
key = substr(start, kvSepPos - start);
value = substr(kvSepPos + 1, pos - kvSepPos - 1);
}
else
{
key = value = "";
}
return pos;
}
开发者ID:caidongyun,项目名称:tray,代码行数:18,代码来源:string.cpp
示例14: toBaseName
static Bstr toBaseName(Utf8Str& aFullName)
{
char *pszRaw = aFullName.mutableRaw();
/*
* Currently there are two metrics which base name is the same as the
* sub-metric name: CPU/MHz and Net/<iface>/LinkSpeed.
*/
if (pszRaw && strcmp(pszRaw, "CPU/MHz") && !RTStrSimplePatternMatch("Net/*/LinkSpeed", pszRaw))
{
char *pszSlash = strrchr(pszRaw, '/');
if (pszSlash)
{
*pszSlash = 0;
aFullName.jolt();
}
}
return Bstr(aFullName);
}
开发者ID:sobomax,项目名称:virtualbox_64bit_edd,代码行数:18,代码来源:VBoxManageMetrics.cpp
示例15: setWebServiceAuthLibrary
HRESULT SystemProperties::setWebServiceAuthLibrary(const Utf8Str &aPath)
{
if (!aPath.isEmpty())
m->strWebServiceAuthLibrary = aPath;
else
m->strWebServiceAuthLibrary = "VBoxAuth";
return S_OK;
}
开发者ID:greg100795,项目名称:virtualbox,代码行数:9,代码来源:SystemPropertiesImpl.cpp
示例16: CheckComArgOutPointerValid
STDMETHODIMP VRDEServer::COMGETTER(VRDEExtPack) (BSTR *aExtPack)
{
CheckComArgOutPointerValid(aExtPack);
AutoCaller autoCaller(this);
HRESULT hrc = autoCaller.rc();
if (SUCCEEDED(hrc))
{
AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
Utf8Str strExtPack = mData->mVrdeExtPack;
alock.release();
if (strExtPack.isNotEmpty())
{
if (strExtPack.equals(VBOXVRDP_KLUDGE_EXTPACK_NAME))
hrc = S_OK;
else
{
#ifdef VBOX_WITH_EXTPACK
ExtPackManager *pExtPackMgr = mParent->getVirtualBox()->getExtPackManager();
hrc = pExtPackMgr->checkVrdeExtPack(&strExtPack);
#else
hrc = setError(E_FAIL, tr("Extension pack '%s' does not exist"), strExtPack.c_str());
#endif
}
if (SUCCEEDED(hrc))
strExtPack.cloneTo(aExtPack);
}
else
{
/* Get the global setting. */
ComPtr<ISystemProperties> systemProperties;
hrc = mParent->getVirtualBox()->COMGETTER(SystemProperties)(systemProperties.asOutParam());
if (SUCCEEDED(hrc))
hrc = systemProperties->COMGETTER(DefaultVRDEExtPack)(aExtPack);
}
}
return hrc;
}
开发者ID:gvsurenderreddy,项目名称:VirtualBox-OSE,代码行数:40,代码来源:VRDEServerImpl.cpp
示例17: alock
HRESULT VRDEServer::getVRDEExtPack(com::Utf8Str &aExtPack)
{
AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
Utf8Str strExtPack = mData->mVrdeExtPack;
alock.release();
HRESULT hrc = S_OK;
if (strExtPack.isNotEmpty())
{
if (strExtPack.equals(VBOXVRDP_KLUDGE_EXTPACK_NAME))
hrc = S_OK;
else
{
#ifdef VBOX_WITH_EXTPACK
ExtPackManager *pExtPackMgr = mParent->i_getVirtualBox()->i_getExtPackManager();
hrc = pExtPackMgr->i_checkVrdeExtPack(&strExtPack);
#else
hrc = setError(E_FAIL, tr("Extension pack '%s' does not exist"), strExtPack.c_str());
#endif
}
if (SUCCEEDED(hrc))
aExtPack = strExtPack;
}
else
{
/* Get the global setting. */
ComPtr<ISystemProperties> systemProperties;
hrc = mParent->i_getVirtualBox()->COMGETTER(SystemProperties)(systemProperties.asOutParam());
if (SUCCEEDED(hrc))
{
BSTR bstr;
hrc = systemProperties->COMGETTER(DefaultVRDEExtPack)(&bstr);
if (SUCCEEDED(hrc))
aExtPack = Utf8Str(bstr);
}
}
return hrc;
}
开发者ID:sobomax,项目名称:virtualbox_64bit_edd,代码行数:38,代码来源:VRDEServerImpl.cpp
示例18: init
/**
* Initializes the host object.
*
* @returns COM result indicator
* @param aInterfaceName name of the network interface
* @param aShortName short name of the network interface
* @param aGuid GUID of the host network interface
* @param ifType interface type
*/
HRESULT HostNetworkInterface::init(Utf8Str aInterfaceName, Utf8Str aShortName, Guid aGuid, HostNetworkInterfaceType_T ifType)
{
LogFlowThisFunc(("aInterfaceName={%s}, aGuid={%s}\n",
aInterfaceName.c_str(), aGuid.toString().c_str()));
ComAssertRet(!aInterfaceName.isEmpty(), E_INVALIDARG);
ComAssertRet(aGuid.isValid(), E_INVALIDARG);
/* Enclose the state transition NotReady->InInit->Ready */
AutoInitSpan autoInitSpan(this);
AssertReturn(autoInitSpan.isOk(), E_FAIL);
unconst(mInterfaceName) = aInterfaceName;
unconst(mNetworkName) = i_composeNetworkName(aShortName);
unconst(mShortName) = aShortName;
unconst(mGuid) = aGuid;
mIfType = ifType;
/* Confirm a successful initialization */
autoInitSpan.setSucceeded();
return S_OK;
}
开发者ID:mdaniel,项目名称:virtualbox-org-svn-vbox-trunk,代码行数:32,代码来源:HostNetworkInterfaceImpl.cpp
示例19: i_checkSetPath
/**
* Validates COMSETTER(Path) arguments.
*/
HRESULT SerialPort::i_checkSetPath(const Utf8Str &str)
{
AssertReturn(isWriteLockOnCurrentThread(), E_FAIL);
if ( ( m->bd->portMode == PortMode_HostDevice
|| m->bd->portMode == PortMode_HostPipe
|| m->bd->portMode == PortMode_RawFile
) && str.isEmpty()
)
return setError(E_INVALIDARG,
tr("Path of the serial port %d may not be empty or null in "
"host pipe or host device mode"),
m->bd->ulSlot);
return S_OK;
}
开发者ID:mcenirm,项目名称:vbox,代码行数:19,代码来源:SerialPortImpl.cpp
示例20: i_usbFilterFieldToString
/**
* Converts a USBFilter field into a string.
*
* (This function is also used by HostUSBDeviceFilter.)
*
* @param aFilter The filter.
* @param aIdx The field index.
* @param aStr The output string.
*/
static void i_usbFilterFieldToString(PCUSBFILTER aFilter, USBFILTERIDX aIdx, Utf8Str &rstrOut)
{
const USBFILTERMATCH matchingMethod = USBFilterGetMatchingMethod(aFilter, aIdx);
Assert(matchingMethod != USBFILTERMATCH_INVALID);
if (USBFilterIsMethodNumeric(matchingMethod))
{
int value = USBFilterGetNum(aFilter, aIdx);
Assert(value >= 0 && value <= 0xffff);
rstrOut = Utf8StrFmt("%04RX16", (uint16_t)value);
}
else if (USBFilterIsMethodString(matchingMethod))
rstrOut = USBFilterGetString(aFilter, aIdx);
else
rstrOut.setNull();
}
开发者ID:svn2github,项目名称:virtualbox,代码行数:26,代码来源:USBDeviceFilterImpl.cpp
注:本文中的Utf8Str类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论