Как-то потребовалось написать DLL для Windows, которая бы работала с MS Excel через OLE.
Граничные условия такие:
— Windows 2008 Server, 64bit
— Ms Excel 2007 (как оказалось, версия значения не имеет)
— Язык — С++ (как оказалось, язык тоже не важен)
Код приводить не буду, так как дело не в нем. При попытке открыть файл Excel вылетала ошибка:
Open method of Workbooks class failed
И больше ничего, ни номера ошибки, ни каких-бы то ни было намеков, ничего. Борьба с гуглем увенчалась успехом и дело оказалось в следующем:
когда запускается фоновое приложение Excel (в нашем случае через OLE), то оно взаимодействует с рабочим столом, т.е. использует определенные папки в нем. В моем случае DLL работало под инстансом Oracle, который запускался под системным аккаунтом, поэтому для успешной работы необходимо было иметь папку, что-то типа:
C:\Windows\SysWOW64\config\systemprofile\Desktop
а ее не было. Как только я ее создал, все заработало и ошибка пропала.
Я думаю, что под 32-битном Windows папка будет примерно такая:
C:\Windows\System32\config\systemprofile\Desktop