2015-03-05 8 views
0

Я хочу использовать функцию интерфейса «IApplicationActivationManager» & это функции-члены «IApplicationActivationManager :: ActivateApplication» MSDN linkIDL файл - статическая компоновка или динамическая связь

Он присутствует в Shobjidl.h & Shobjidl. IDL. Я видел * .DLL или * .lib как зависимость, в которой определены функции Microsoft, поэтому мы знаем, что это статическое связывание или динамическое связывание.

Но я пытаюсь понять, что делает IDL - дунаматическая или статическая подкладка? Я должен предоставить любую DLL/lib? Как происходит подкладка?

ответ

2

IApplicationActivationManager - это тип интерфейса COM. COM-объекты всегда создаются динамически во время выполнения, они не имеют требования к связям за пределами ole32.lib, возможно, .lib, который определяет GUID для объекта. Вы получаете указатель интерфейса с универсальной фабрикой COM-объектов, CoCreateInstance().

Образец, вероятно, помогает, я отправлю код для консольного режима 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; 
} 

Вам нужна модель пользователя идентификатор приложения для приложения, которое вы хотите активировать, this MSDN page описывает, как обнаружить их.

+0

Спасибо. Помогает. Я хочу отобразить изображение * .png, * .jpg и т. Д., Используя приложение «Photos metro» из моего консольного приложения, и я хочу ТОЛЬКО использовать объекты в «mincore.lib» и ничего за его пределами. Я не думаю, что kernel32.lib, ole32.lib и т. Д. Является presemnt в mincore.lib? Я изучаю, как я могу это достичь? Также во втором аргументе ActivateApplication(), если я укажу имя изображения «abc.png», оно отобразится. ? – codeLover

+0

Mincore.lib в порядке, вы должны были это узнать самостоятельно. Вы не можете просто передать «abc.png», требуется полное имя пути. Как c: \ foo \ bar \ abc.png. –

+0

Я даю ему что-то вроде этого: LPCWSTR imageArg = L "C: \\ data \\ Users \\ Public \\ Pictures \\ Muscles-Posterior.png"; ч = paam-> ActivateApplication (APPID, imageArg, AO_NONE, &pid); Но это просто открыть приложение фотографий, но не открывая файла изображения «PNG»? – codeLover

 Смежные вопросы

  • Нет связанных вопросов^_^