Win32 API:StringFromIID 函数(Combaseapi.h)
StringFromIID 函数是 Win32 API 中的一个函数,用于将 IID(Interface ID)转换为字符串形式。该函数在 Combaseapi.h 头文件中声明。以下是 StringFromIID 函数的基本定义:HRESULT StringFromIID( REFIID rclsid, LPOLESTR *lplpsz);参数说明: rclsid: 要转换为字符串的 IID。 lplpsz: 指向接收字符串的指针。函数返回 HRESULT 类型的值,表示操作的结果。如果函数成功执行,返回 S_OK,并通过 lplpsz 参数返回字符串形式的 IID;否则返回相应的错误代码。示例用法:#include <Windows.h>#include <Combaseapi.h>int main() { // 创建一个IID IID iid = IID_IMyInterface; // 将IID转换为字符串 LPOLESTR strIID = nullptr; HRESULT hr = StringFromIID(iid...
Win32 API:StringFromGUID2 函数(Combaseapi.h)
StringFromGUID2 函数是 Win32 API 中的一个函数,用于将 GUID(Globally Unique Identifier)转换为字符串形式。该函数在 Combaseapi.h 头文件中声明。以下是 StringFromGUID2 函数的基本定义:int StringFromGUID2( REFGUID rguid, LPOLESTR lpsz, int cchMax);参数说明: rguid: 要转换为字符串的 GUID。 lpsz: 指向接收字符串的缓冲区的指针。 cchMax: 缓冲区的大小(以字符为单位)。函数返回一个整数,表示字符串的长度(不包括 null 终止符)。如果转换失败或者缓冲区大小不足,返回的值为 0。示例用法:#include <Windows.h>#include <Combaseapi.h>int main() { // 创建一个GUID GUID guid = {0x12345678, 0x9ABC, 0xDEF0, {0x12, 0x34, 0x56, 0x78, 0x9A, 0x...
Win32 API:StringFromCLSID 函数(Combaseapi.h)
StringFromCLSID 函数是 Win32 API 中的一个函数,用于将一个 CLSID(Class ID)转换为字符串形式。该函数在 Combaseapi.h 头文件中声明。以下是 StringFromCLSID 函数的基本定义:HRESULT StringFromCLSID( REFCLSID rclsid, LPOLESTR *lplpsz);参数说明: rclsid: 要转换为字符串的 CLSID。 lplpsz: 指向接收字符串的指针。函数返回 HRESULT 类型的值,表示操作的结果。如果函数成功执行,返回 S_OK,并通过 lplpsz 参数返回字符串形式的 CLSID;否则返回相应的错误代码。示例用法:#include <Windows.h>#include <Combaseapi.h>int main() { // 创建一个CLSID CLSID clsid = CLSID_MyObject; // 将CLSID转换为字符串 LPOLESTR strCLSID = nullptr; HRESULT hr...
Win32 API:RoGetAgileReference 函数(Combaseapi.h)
RoGetAgileReference 函数是用于获取与 Windows 运行时 (WinRT) 对象相关的“敏捷引用”(agile reference)的函数。该函数在 Combaseapi.h 头文件中声明,它通常用于在不同的线程之间传递 WinRT 对象的引用。以下是 RoGetAgileReference 函数的基本定义:HRESULT RoGetAgileReference( AgileReferenceOptions options, REFIID riid, IUnknown *pAgileReference, IAgileReference **ppAgileReference);参数说明: options: 指定敏捷引用的选项,可以是 AGILEREFERENCE_DEFAULT 或 AGILEREFERENCE_DELAYEDMARSHAL。 riid: 请求的接口的 IID。 pAgileReference: 指向 IUnknown 接口的指针,表示 WinRT 对象的引用。 ppAgileRe...
Win32 API:PropVariantClear 函数(Combaseapi.h)
PropVariantClear 函数是 Win32 API 中的一个函数,用于清理 PROPVARIANT 结构的内容,防止内存泄漏。该函数在 Combaseapi.h 头文件中声明。以下是 PropVariantClear 函数的基本定义:HRESULT PropVariantClear( PROPVARIANT *pvar);参数说明: pvar: 指向 PROPVARIANT 结构的指针,表示待清理的变量。函数返回 HRESULT 类型的值,表示操作的结果。如果函数成功执行,返回 S_OK;否则返回相应的错误代码。PROPVARIANT 结构是用于存储属性变量的通用结构,通常在与属性系统和数据存储有关的 API 中使用。使用 PropVariantClear 函数是确保释放 PROPVARIANT 变量中占用的资源(如字符串、内存块等)的一种常见方式。示例用法:#include <Windows.h>#include <Combaseapi.h>int main() { // 创建一个PROPVARIANT变量 PROPVARIANT pr...
Win32 API:IIDFromString 函数(Combaseapi.h)
IIDFromString 函数是 Win32 API 中的一个函数,用于将字符串形式的 IID(Interface ID)转换为对应的 GUID。该函数在 Combaseapi.h 头文件中声明。以下是 IIDFromString 函数的基本定义:HRESULT IIDFromString( LPCOLESTR lpsz, LPIID lpiid);参数说明: lpsz: 指向包含字符串形式 IID 的 null 终止字符串的指针。 lpiid: 指向 IID 结构的指针,用于接收转换后的 GUID。函数返回 HRESULT 类型的值,表示操作的结果。如果函数成功执行,返回 S_OK,并通过 lpiid 参数返回转换后的 GUID;否则返回相应的错误代码。示例用法:#include <Windows.h>#include <Combaseapi.h>int main() { // 将字符串形式的IID转换为GUID const wchar_t* strIID = L"{00000000-0000-0000-C000-00000...
Win32 API:IID_PPV_ARGS 函数(Combaseapi.h)
IID_PPV_ARGS 宏并非是 Win32 API 中的一个函数,而是一个宏定义,用于简化获取接口指针的代码。这个宏通常在使用 COM(Component Object Model)编程时,用于获取对象的接口指针,并指定请求的接口的 IID(Interface ID)。以下是 IID_PPV_ARGS 宏的基本定义:#define IID_PPV_ARGS(ppType) __uuidof(**(ppType)), IID_PPV_ARGS_Helper(ppType)这个宏在 C++ 代码中经常用于简化 QueryInterface 的调用,使代码更加清晰和简洁。示例用法:#include <Windows.h>#include <Combaseapi.h>int main() { // 初始化COM库 CoInitialize(NULL); // 创建一个对象 IUnknown *pUnknown = nullptr; CoCreateInstance(CLSID_MyObject, nullptr, CLSCTX_INPR...
Win32 API:GetHGlobalFromStream 函数(Combaseapi.h)
GetHGlobalFromStream 函数是 Win32 API 中的一个函数,用于获取基于内存的 IStream 接口中关联的全局内存句柄。该函数在 Combaseapi.h 头文件中声明。以下是 GetHGlobalFromStream 函数的基本定义:HRESULT GetHGlobalFromStream( IStream *pstm, HGLOBAL *phglobal);参数说明: pstm: 指向 IStream 接口的指针,表示基于内存的数据流。 phglobal: 指向 HGLOBAL 类型的指针,用于接收关联的全局内存句柄。函数返回 HRESULT 类型的值,表示操作的结果。如果函数成功执行,返回 S_OK,并通过 phglobal 参数返回关联的全局内存句柄;否则返回相应的错误代码。示例用法:#include <Windows.h>#include <Combaseapi.h>int main() { // 初始化COM库 CoInitialize(NULL); // 创建一个基于内存的IStream接口 H...
Win32 API:FreePropVariantArray 函数(Combaseapi.h)
FreePropVariantArray 函数是用于释放 PROPVARIANT 数组的 Win32 API 函数,该函数在 Combaseapi.h 头文件中声明。以下是 FreePropVariantArray 函数的基本定义:void FreePropVariantArray( PROPVARIANT *pvar, ULONG cElems);参数说明: pvar: 指向包含 PROPVARIANT 数组的指针。 cElems: 数组中元素的数量。函数的作用是释放由 pvar 指向的 PROPVARIANT 数组。在释放之前,函数会对数组中的每个元素调用 PropVariantClear 函数来清理其内容。示例用法:#include <Windows.h>#include <Combaseapi.h>int main() { // 创建一个包含PROPVARIANT的数组 PROPVARIANT propVarArray[3]; PropVariantInit(&propVarArray[0]); Prop...
Win32 API:DllGetClassObject 函数(Combaseapi.h)
DllGetClassObject 函数是 COM(Component Object Model)中的一个标准函数,它用于获取类工厂对象的指针。这个函数通常由 DLL 的导出的 DllGetClassObject 函数中的 IClassFactory2 接口调用。以下是 DllGetClassObject 函数的基本定义:STDAPI DllGetClassObject( REFCLSID rclsid, REFIID riid, LPVOID *ppv);参数说明: rclsid: 要创建的类的 CLSID。 riid: 请求的接口的 IID。 ppv: 接收类工厂接口指针的地址。函数返回 HRESULT 类型的值,表示操作的结果。如果函数成功执行,返回 S_OK,并通过 ppv 参数返回请求的接口指针;否则返回相应的错误代码。示例用法:#include <Windows.h>#include <Combaseapi.h>// 实现IClassFactory2接口的类工厂class MyFactory : public IClassFactory...
Win32 API:DllCanUnloadNow 函数(Combaseapi.h)
DllCanUnloadNow 函数是 COM(Component Object Model)中的一个标准函数,它用于通知系统 DLL 是否可以被卸载。这个函数通常由 DLL 的导出的 DllGetClassObject 函数中的 IClassFactory2 接口调用。以下是 DllCanUnloadNow 函数的基本定义:STDAPI DllCanUnloadNow();函数返回 HRESULT 类型的值,表示 DLL 是否可以被卸载。如果返回 S_OK,则表示 DLL 当前没有活动的对象实例,可以被卸载;如果返回 S_FALSE,则表示 DLL 仍然有活动的对象实例,不能被卸载。示例用法:#include <Windows.h>#include <Combaseapi.h>// 该变量用于跟踪 DLL 的活动对象实例数static LONG g_cDllRef = 0;// 导出函数,由DllGetClassObject中的IClassFactory2接口调用extern "C" HRESULT STDMETHODCALLTYPE Dl...
Win32 API:CreateStreamOnHGlobal 函数(Combaseapi.h)
CreateStreamOnHGlobal 函数是Win32 API中的一个函数,定义在 Combaseapi.h 头文件中。这个函数用于创建一个基于内存的 IStream 接口,可以用于在内存中管理数据流。以下是 CreateStreamOnHGlobal 函数的基本定义:HRESULT CreateStreamOnHGlobal( HGLOBAL hGlobal, BOOL fDeleteOnRelease, LPSTREAM * ppstm);参数说明: hGlobal: 一个全局内存句柄,用于存储数据。 fDeleteOnRelease: 一个布尔值,指示在释放 IStream 接口时是否同时删除关联的全局内存。如果设置为 TRUE,则在释放 IStream 接口时会删除内存;如果设置为 FALSE,则不删除内存。 ppstm: 一个指向 IStream 接口指针的指针,用于接收创建的流接口。函数返回 HRESULT 类型的值,表示操作的结果。如果函数成功执行,返回 S_OK;否则返回相应的错误代码。示例用法:#include <Windows.h...
Win32 API:CoWaitForMultipleHandles 函数(Combaseapi.h)
CoWaitForMultipleHandles 函数并非直接属于 Win32 API,它是 Windows 操作系统中 COM(Component Object Model)编程接口的一部分。这个函数用于等待多个句柄中的一个或多个句柄发生信号。以下是 CoWaitForMultipleHandles 函数的声明:HRESULT CoWaitForMultipleHandles( _In_ DWORD dwFlags, _In_ DWORD dwTimeout, _In_ ULONG cHandles, _In_ LPHANDLE pHandles, _Out_ LPDWORD lpdwindex);参数说明: dwFlags: 控制等待的行为。可以是 COWAIT_WAITALL 或 COWAIT_ALERTABLE 之一,分别表示等待所有句柄或允许调用线程响应异步处理。 dwTimeout: 等待的超时时间(以毫秒为...
Win32 API:CoUnmarshalInterface 函数(Combaseapi.h)
CoUnmarshalInterface 函数是 Windows 操作系统中 COM(Component Object Model)编程接口的一部分。这个函数用于将接口指针从缓冲区中反序列化,并返回反序列化后的接口指针。以下是 CoUnmarshalInterface 函数的声明:HRESULT CoUnmarshalInterface( _In_reads_bytes_(cb) IStream *pStm, _In_ REFIID riid, _COM_Outptr_ void **ppv);参数说明: pStm: 指向包含序列化数据的 IStream 接口的指针。 riid: 用于指定所需接口的标识符。 ppv: 接收反序列化后的接口指针的地址。返回值说明: 如果函数调用成功,返回 S_OK。 如果函数调用失败,返回相应的错误码。使用示例:#include <Objbase.h>// ...IStream *pStream = /* 通过某种方式获取包含序列化数据的 IStream 指针 */;// 指定所需接口的标...
Win32 API:CoUninitialize 函数(Combaseapi.h)
CoUninitialize 函数是 Windows 操作系统中 COM(Component Object Model)编程接口的一部分,用于取消初始化 COM 运行时。这个函数用于释放 COM 运行时使用的系统资源,通常在应用程序结束时调用。以下是 CoUninitialize 函数的声明:void CoUninitialize(void);CoUninitialize 函数没有参数,它用于释放 COM 运行时初始化时所分配的资源。通常情况下,你的程序在调用 CoInitialize 函数初始化 COM 运行时后,应该在程序退出时调用 CoUninitialize 函数。使用示例:#include <Objbase.h>int main() { // 初始化 COM 运行时 HRESULT hr = CoInitialize(NULL); if (FAILED(hr)) { // 处理初始化失败的情况 return hr; } // 在这里进行 COM 相关的操作 // 取消初始化 COM 运行时 Co...
Win32 API:CoTaskMemRealloc 函数(Combaseapi.h)
CoTaskMemRealloc 函数是 Windows 操作系统中 COM(Component Object Model)编程接口的一部分。它用于重新分配由 CoTaskMemAlloc 或 CoTaskMemRealloc 分配的内存块。以下是 CoTaskMemRealloc 函数的声明:LPVOID CoTaskMemRealloc(LPVOID pv, SIZE_T cb);参数说明: pv: 指向要重新分配的内存块的指针。 cb: 新的内存块大小(以字节为单位)。返回值说明: 如果函数调用成功,返回指向重新分配的内存块的指针。 如果函数调用失败,返回 NULL。使用示例:#include <Objbase.h>// ...// 分配内存块LPVOID pBuffer = CoTaskMemAlloc(dwInitialSize);if (pBuffer != NULL) { // 使用内存块 // ... // 重新分配内存块 LPVOID pNewBuffer = CoTaskMemRealloc(pBuffer, dwNewSize)...
Win32 API:CoTaskMemFree 函数(Combaseapi.h)
CoTaskMemFree 函数是 Windows 操作系统中 COM(Component Object Model)编程接口的一部分。这个函数用于释放通过 CoTaskMemAlloc 分配的内存块。以下是 CoTaskMemFree 函数的声明:void CoTaskMemFree(LPVOID pv);参数说明: pv: 指向要释放的内存块的指针。CoTaskMemFree 函数用于释放使用 CoTaskMemAlloc 分配的内存。这对于COM内存管理很常见,特别是在涉及跨模块或者跨组件的内存分配和释放时。使用示例:#include <Objbase.h>// ...// 分配内存块LPVOID pBuffer = CoTaskMemAlloc(dwSize);if (pBuffer != NULL) { // 使用内存块 // ... // 释放内存块 CoTaskMemFree(pBuffer);}需要注意的是,使用 CoTaskMemAlloc 分配的内存块应该通过 CoTaskMemFree 函数来释放。如果使用标准的 malloc ...
Win32 API:CoTaskMemAlloc 函数(Combaseapi.h)
CoTaskMemAlloc 函数不是直接包含在 Combaseapi.h 头文件中,而是在 Objbase.h 头文件中定义。这个函数用于在 COM(Component Object Model)编程中分配内存,特别是用于分配在调用 COM 函数时传递给调用者的内存块。通常,这样的内存块需要由调用者负责释放。以下是 CoTaskMemAlloc 函数的声明:PVOID CoTaskMemAlloc(SIZE_T cb);参数说明: cb: 要分配的内存块的大小(以字节为单位)。返回值说明: 如果分配成功,返回指向分配的内存块的指针。 如果分配失败,返回 NULL。使用示例:#include <Objbase.h>// ...// 分配内存块LPVOID pBuffer = CoTaskMemAlloc(dwSize);if (pBuffer != NULL) { // 使用内存块 // ... // 释放内存块 CoTaskMemFree(pBuffer);}需要注意的是,使用 CoTaskMemAlloc 分配的内存块应该通过 CoTaskMem...
Win32 API:CoSuspendClassObjects 函数(Combaseapi.h)
CoSuspendClassObjects 函数是 Windows 操作系统中 COM(Component Object Model)编程接口的一部分。它用于暂停在注册表中注册的类工厂对象的激活。以下是 CoSuspendClassObjects 函数的声明:HRESULT CoSuspendClassObjects(void);这个函数没有参数,其目的是通知系统暂停激活通过 CoRegisterClassObject 注册的类工厂对象。当应用程序调用 CoRegisterClassObject 注册一个类工厂对象时,这个对象默认是可以激活的。通过调用 CoSuspendClassObjects,应用程序可以通知系统暂停这些类工厂对象的激活,从而阻止客户端程序通过这些对象创建 COM 组件的实例。返回值说明: 如果函数调用成功,返回 S_OK。 如果函数调用失败,返回相应的错误码。这个函数通常在应用程序即将退出时被调用,以确保系统不再激活该应用程序的类工厂对象。在调用 CoSuspendClassObjects 后,相关的类工厂对象将不再对外提供服务。需要注意的是,CoSuspendC...
Win32 API:CoSetProxyBlanket 函数(Combaseapi.h)
CoSetProxyBlanket 函数是 Windows 操作系统中 COM(Component Object Model)编程接口的一部分。该函数用于设置一个代理对象(proxy)的身份验证信息。以下是 CoSetProxyBlanket 函数的声明:HRESULT CoSetProxyBlanket( _In_ IUnknown *pProxy, _In_ DWORD dwAuthnSvc, _In_ DWORD dwAuthzSvc, _In_opt_ OLECHAR *pServerPrincName, _In_ DWORD dwAuthnLevel, _In_ DWORD dwImpLevel, _In_opt_ RPC_AUTH_IDENTITY_HANDLE pAuthInfo, _In_ DWORD dwCa...