Summary: | Не работает вызов "Shell.Application" в 1С | ||
---|---|---|---|
Product: | WINE@Etersoft | Reporter: | Igor Talanov <igor> |
Component: | OLE / DDE / RPC | Assignee: | Александр Морозов <amorozov> |
Status: | CLOSED FIXED | QA Contact: | |
Severity: | minor | ||
Priority: | P3 | CC: | amorozov, baraka, lav, shpigor, stas |
Version: | 1.0.11 | ||
Target Milestone: | --- | ||
Hardware: | PC | ||
OS: | All | ||
Whiteboard: | |||
Заявки RT: | 10055, 10994, 11537 | Связано с: | |
Дата напоминания: | |||
Bug Depends on: | |||
Bug Blocks: | 42, 5634, 6182, 6276 | ||
Attachments: |
импортируемый реестр
реестр |
Description
Igor Talanov
2009-04-20 18:57:55 MSD
Объект Shell.Application представляет графическую оболочку Windows - Windows Explorer. Dim oShell Set oShell = CreateObject("Shell.Application") oShell.TrayProperties() oShell.SetTime() http://www.askit.ru/custom/progr_admin/m07/07_02_shell_application.htm warn:ole:CLSIDFromProgID couldn't open key for ProgID L"Shell.Application" Внесение записи в реестр (в аттаче) всё равно не позволяет программе найти ProgID Created attachment 1161 [details]
импортируемый реестр
Кусок реестра, экспортированный с win2k3, должен добавлять информацию об объекте Shell.Application
Created attachment 1163 [details]
реестр
реестр, содержащий нужный ProgID (в дополнение к первому аттачу)
trace:shell:HCR_GetClassNameA -- Shell Automation Service trace:shell:DllGetClassObject CLSID: {13709620-c279-11ce-a49e-444553540000} (Shell Automation Service),IID: {00000001-0000-0000-c000-000000000046} (IID_IClassFactory) trace:shell:HCR_RegOpenClassIDKey CLSID\{13709620-c279-11ce-a49e-444553540000} trace:reg:NtOpenKey (0x50,L"CLSID\\{13709620-c279-11ce-a49e-444553540000}",20019,0x32e9e8) trace:reg:NtOpenKey <- 0x60 trace:reg:RegLoadMUIStringW (hKey = 0x60, pwszValue = L"LocalizedString", pwszBuffer = 0x13ff90, cbBuffer = 200, pcbData = (n il), dwFlags = 0, pwszBaseDir = L"") stub trace:reg:RegQueryValueExW (0x60,L"LocalizedString",(nil),0x32e948,(nil),0x32e944=0) trace:reg:NtQueryValueKey (0x60,L"LocalizedString",2,0x32e7c8,12) trace:reg:RegQueryValueExA (0x60,"",(nil),(nil),0x32ea54,0x32ea08=100) trace:reg:NtQueryValueKey (0x60,L"",2,0x32e898,256) trace:shell:HCR_GetClassNameA -- Shell Automation Service fixme:shell:DllGetClassObject failed for CLSID= {13709620-c279-11ce-a49e-444553540000} (Shell Automation Service) err:ole:apartment_getclassobject DllGetClassObject returned error 0x80040111 Ещё одна заявка с этой ошибкой, правда работать не мешает. Какая ситуация - чего не хватает для поддержки, что нужно сделать, где зависимая бага и прогноз трудоемкости? wine 1.0.11 10/6 бутылка bugs/3850 $ ./run_test.sh err:ole:CoGetClassObject class {6c736db1-bd94-11d0-8a23-00aa00b58e10} not registered err:ole:CoGetClassObject no class object {6c736db1-bd94-11d0-8a23-00aa00b58e10} could be created for context 0x1 err:ole:COMPOBJ_DllList_Add couldn't load in-process dll L"%" err:ole:create_server class {13709620-c279-11ce-a49e-444553540000} not registered fixme:ole:CoGetClassObject CLSCTX_REMOTE_SERVER not supported err:ole:CoGetClassObject no class object {13709620-c279-11ce-a49e-444553540000} could be created for context 0x15 ^C<wine@cellar bottle bugs/3850>$ ./run_test.sh err:ole:CoGetClassObject class {6c736db1-bd94-11d0-8a23-00aa00b58e10} not registered err:ole:CoGetClassObject no class object {6c736db1-bd94-11d0-8a23-00aa00b58e10} could be created for context 0x1 err:ole:COMPOBJ_DllList_Add couldn't load in-process dll L"%" err:ole:create_server class {13709620-c279-11ce-a49e-444553540000} not registered fixme:ole:CoGetClassObject CLSCTX_REMOTE_SERVER not supported err:ole:CoGetClassObject no class object {13709620-c279-11ce-a49e-444553540000} could be created for context 0x15 После того, как у нас не регистрировался msxml, меня очень смущает эта строчка в логе: err:ole:COMPOBJ_DllList_Add couldn't load in-process dll L"%" Может, у нас опять что-то регистрируется неправильно? Полезные ссылки: http://msdn.microsoft.com/en-us/library/bb774094(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/bb774116(v=VS.85).aspx http://www.com.it-berater.org/COM/windows_shell/interfaces/IShellDispatch.htm Баг в апстриме: http://bugs.winehq.org/show_bug.cgi?id=8987 Добавил IShellDispatch и необходимые ему интерфейсы в shldisp.idl. В объявлении BrowseForFolder в idl в SDK от MS и в MSDN (http://msdn.microsoft.com/en-us/library/bb774065(v=vs.85).aspx) присутствует тип FOLDER. Непонятно, что это такое. Но midl генерирует h-файл в котором в этом методе вместо FOLDER используется Folder, так что, видимо, можно использовать Folder вместо FOLDER. Если среди атрибутов интерфейса отсутствует object, то widl генерирует какой-то странный h-файл: без соответствующей интерфейсу структуры, из методов интерфейса генерируются обычные функции без изменения имени. В результате при сборке wine возникает конфликт имён. Добавил object, хотя в idl из SDK его нет. Сделал стаб для интерфейса IShellDispatch. Реализовал создание ключей реестра Shell.Application при выполнении regsvr32 shell32.dll. Занимался реализацией методов IDispatch интерфейса IShellDispatch. > Занимался реализацией методов IDispatch интерфейса IShellDispatch.
Готово. Отправил патчи в wine-patches-test.
Закрываю. |