Як працювати з IDL файлами в Delphi
У MSDN знайшов опис потрібних мені інтерфейсів, проте замість звичних розділів "Header" і "Library" там стоїть "Headers and IDL files - shappmgr.h, shappmgr.idl". У мене таких файлів на комп'ютері навіть немає (WinXP). Що з ними за правилами треба робити?
У Add/Remove programs свою програму прописуєш?
cpp_quote("#ifndef _SHAPPMGR_H_") cpp_quote("#define _SHAPPMGR_H_")
// // shappmgr.idl : IDL source for shappmgr.h // import "oaidl.idl"; import "ocidl.idl"; import "appmgmt.h ";
// // IShellApp interface // [ uuid(A3E14960-935F-11D1-B8B8-006008059382), // IID_IShellApp object ] interface IShellApp : IUnknown typedef enum _tagAppInfoFlags AIM_DISPLAYNAME = 0x00000001, AIM_VERSION = 0x00000002, AIM_PUBLISHER = 0x00000004, AIM_PRO AIM_REGISTEREDOWNER = 0x00000010, AIM_REGISTEREDCOMPANY = 0x00000020, AIM_LANGUAGE = 0x00000040, AIM_SUPPORTURL = 0x000000080,
AIM_HELPLINK = 0x00000200, AIM_INSTALLLOCATION = 0x00000400, AIM_INSTALLSOURCE = 0x00000800, AIM_INSTALLDATE = 0x00001000, // AIM_REQUIREDBYPOLICY = 0x00002000, Obsolete. Do not reuse. AIM_CONTACT = 0x00004000, AIM_COMMENTS = 0x00008000, AIM_IMAGE = 0x00020000, AIM_READMEURL = 0x00040000, AIM_UPDATE APPINFODATAFLAGS;
typedef struct _AppInfoData DWORD cbSize; DWORD dwMask; //APPINFODATAFLAGS, IN/OUT LPWSTR pszDisplayName; LPWSTR pszVersion; LPWSTR pszPublisher; LPWSTR pszProductID; LPWSTR pszRegisteredOwner; LPWSTR pszRegisteredCompany; LPWSTR pszLanguage; LPWSTR pszSupportUrl; LPWSTR pszSupportTelephone; LPWSTR pszHelpLink; LPWSTR pszInstallLocation; LPWSTR pszInstallSource; LPWSTRpszInstallDate; LPWSTR pszContact; LPWSTR pszComments; LPWSTR pszImage; LPWSTR pszReadmeUrl; LPWSTR pszUpdateInfoUrl; > APPINFODATA, *PAPPINFODATA;
HRESULT GetAppInfo([in, out] PAPPINFODATA pai);
typedef enum _tagAppActionFlags APPACTION_INSTALL = 0x00000001, APPACTION_UNINSTALL = 0x00000002, APPACTION_MODIFY = 0x00000004, APPACTION_REPAIR = 0x00000008, APPACTION_UPGRADE = 0x0 0000010, APPACTION_CANGETSIZE = 0x00000020, APPACTION_MODIFYREMOVE = 0x00000080, APPACTION_ADDLATER = 0x00000100, APPACTION_UNSCHEDULE = 0x00000200 > APPACTIONFLAGS;
HRESULT GetPossibleActions([out] DWORD * pdwActions); // // Синхронно отримує повільну інформацію для програми. Цей виклик методу // може бути дуже повільним. // typedef struct _tagSlowAppInfo ULONGLONG ullSize; FILETIME ftLastUsed; int iTimesUsed; LPWSTR pszImage; > SLOWAPPINFO, *PSLOWAPPINFO;
HRESULT GetSlowAppInfo([in] PSLOWAPPINFO psaid); // // Отримайте кешовану повільну інформацію для програми, це буде швидко. // HRESULT GetCachedSlowAppInfo([in] PSLOWAPPINFO psaid); // // Повертає S_OK, якщо встановлено S_FALSE, якщо не встановлено // HRESULT IsInstalled(void); >;
// // Інтерфейс IPublishedApp // [ uuid(1BC752E0-9046-11D1-B8B3-006008059382), // IID_IPublishedApp об’єкт ] інтерфейс IPublishedApp : IShellApp typedef enum _tagPublishedAppInfoFlags PAI_SOURCE = 0x00000001, PAI_ASSIGNEDTIME = 0x00000002, PAI_PUBLISHEDTIME = 0x00000004, PAI_SCHEDULEDTIME = 0x00000008, PAI_EXPIRETIME = 0x00000010 > PUBAPPINFOFLAGS;
typedef struct _PubAppInfo DWORD cbSize; DWORD dwMask; // PUBAPPINFOFLAGS, IN/OUT LPWSTR pszSource; SYSTEMTIME stAssigned; SYSTEMTIME stОпубліковано; SYSTEMTIME stScheduled; SYSTEMTIME stExpire; > PUBAPPINFO, *PPUBAPPINFO;
HRESULT Install([in]LPSYSTEMTIME pstInstall); HRESULT GetPublishedAppInfo([in, out] PPUBAPPINFO ppai); HRESULT Unschedule(void); >;
// // Інтерфейс IEnumPublishedApps // [ uuid(0B124F8C-91F0-11D1-B8B5-006008059382), // IID_IEnumPublishedApps об’єкт ] інтерфейс IEnumPublishedApps : IUnknown
HRESULT Next([out] IPublishedApp** pia); HRESULT Reset(void); >;
// // Інтерфейс IAppPublisher // [ uuid(07250A10-9CF9-11D1-9076-006008059382), // IID_IAppPublisher об’єкт ] інтерфейс IAppPublisher : IUnknown HRESULT GetNumberOfCategories(DWORD * pdwCat); HRESULT GetCategories(APPCATEGORYINFOLIST * pAppCategoryList); HRESULT GetNumberOfApps(DWORD * pdwApps); HRESULT EnumApps(GUID * pAppCategoryId, IEnumPublishedApps ** ppepa); >
> shappmgr.h, shappmgr.idl". У мене таких файлів на комп'ютері > навіть немає (WinXP).А ти поставив Visual Studio, щоб вони були?
←→Aldor_ ( 2004-07-14 04:08 ) [4]
Немного наоборот: список вираховую :)
> А ти Visual Studio поставив, щоб вони були?
Насколько я розумію, з VS поставляються _заголовки_, а ось сама бібліотека (.idl. ) повинна бути у вінде, чи я неправ?
І все-таки головний питання - .idl - це бібліотека? Можна написати LoadLibrary("shappmgr.idl") ?
←→Aldor_ ( 2004-07-14 06:04 ) [5]
Хм, найшов бібліотеку appmgr.dll, перевірив функції із заголовків із [2]. Вони там є. Можливо, це і є та сама бібліотека. Тоді який сенс в msdn не приводить посилання на dll-файл,
←→Aldor_ ( 2004-07-14 06:08 ) [6]
←→Aldor_ (2004-07-14 11:55) [7]
Про всяк випадок приклад таких декларацій: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/ifaces/iapppublisher/E numApps. asp
заразом гілку підніму.
←→Оші (2004-07-14 12:15) [8]
import "appmgmt.h"; це не те саме що include .
←→Aldor_ (2004-07-14 12:37) [9]
Оші (14.07.04 12:15) [8]
Дякую, йду в гугл ("import vs include") :)