IDL 文件 - 静态链接或动态链接
IDL file - static linking or dynamic linking
我想使用函数接口 "IApplicationActivationManager" & 它的成员函数“IApplicationActivationManager::ActivateApplication”
MSDN link
它存在于 Shobjidl.h 和 Shobjidl.idl 中。
我已经看到 *.DLL 或 *.lib 作为定义 Microsoft 函数的依赖项,所以我们知道它是静态链接还是动态链接。
But I'm trying to understand what does IDL do - dunamic or static
lining ? DO I need to provide any DLL/lib ? How does the lining happen ?
IApplicationActivationManager 是 COM 接口类型。 COM 对象总是在运行时动态创建,它们没有超过 ole32.lib 的链接要求,可能是定义对象 GUID 的 .lib。您使用通用 COM 对象工厂 CoCreateInstance() 获取接口指针。
示例可能有帮助,我将 post 激活天气应用程序的 Win32 控制台模式应用程序的代码 Windows 8. 从提供的 VS 项目模板创建项目。无需更改,模板已链接所需的所有内容(kernel32.lib、ole32.lib 和 uuid.lib)。
#include "stdafx.h"
#include <Windows.h>
#include <ShlObj.h>
#include <assert.h>
int main()
{
auto hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
assert(SUCCEEDED(hr));
IApplicationActivationManager* itf;
hr = CoCreateInstance(CLSID_ApplicationActivationManager, NULL,
CLSCTX_LOCAL_SERVER,
__uuidof(IApplicationActivationManager),
(void**)&itf);
if (SUCCEEDED(hr)) {
auto weatherApp = L"Microsoft.BingWeather_8wekyb3d8bbwe!App";
DWORD dontuse;
hr = itf->ActivateApplication(weatherApp,
L"", AO_NONE, &dontuse);
assert(SUCCEEDED(hr));
itf->Release();
}
CoUninitialize();
return 0;
}
您需要要激活的应用程序的应用程序用户模型 ID,this MSDN page 描述了如何发现它们。
我想使用函数接口 "IApplicationActivationManager" & 它的成员函数“IApplicationActivationManager::ActivateApplication” MSDN link
它存在于 Shobjidl.h 和 Shobjidl.idl 中。 我已经看到 *.DLL 或 *.lib 作为定义 Microsoft 函数的依赖项,所以我们知道它是静态链接还是动态链接。
But I'm trying to understand what does IDL do - dunamic or static lining ? DO I need to provide any DLL/lib ? How does the lining happen ?
IApplicationActivationManager 是 COM 接口类型。 COM 对象总是在运行时动态创建,它们没有超过 ole32.lib 的链接要求,可能是定义对象 GUID 的 .lib。您使用通用 COM 对象工厂 CoCreateInstance() 获取接口指针。
示例可能有帮助,我将 post 激活天气应用程序的 Win32 控制台模式应用程序的代码 Windows 8. 从提供的 VS 项目模板创建项目。无需更改,模板已链接所需的所有内容(kernel32.lib、ole32.lib 和 uuid.lib)。
#include "stdafx.h"
#include <Windows.h>
#include <ShlObj.h>
#include <assert.h>
int main()
{
auto hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
assert(SUCCEEDED(hr));
IApplicationActivationManager* itf;
hr = CoCreateInstance(CLSID_ApplicationActivationManager, NULL,
CLSCTX_LOCAL_SERVER,
__uuidof(IApplicationActivationManager),
(void**)&itf);
if (SUCCEEDED(hr)) {
auto weatherApp = L"Microsoft.BingWeather_8wekyb3d8bbwe!App";
DWORD dontuse;
hr = itf->ActivateApplication(weatherApp,
L"", AO_NONE, &dontuse);
assert(SUCCEEDED(hr));
itf->Release();
}
CoUninitialize();
return 0;
}
您需要要激活的应用程序的应用程序用户模型 ID,this MSDN page 描述了如何发现它们。