У нас есть устаревшая кодовая база perl
, которая включает следующую строку:
use Win32::OLE::Const 'Microsoft Excel';
Это работало традиционно, но не работает на более новых 64-разрядных установках, таких как Windows 10.
Ошибка, по-видимому, в источнике OLE.xs
, как показано ниже, но у меня ограниченное понимание функций Windows и XS
в целом.
err = RegQueryValueA(hKeyLangid, "win32", szFile, &cbFile);
Если этот запрос не выполняется, он никогда не вызываетWin32::OLE::Const::_Typelib
которая является функцией, которая хранит результат.Проверяя мой реестр, ключи действительно Win64
, а не win32
.Другие работающие ключи имеют либо win32
, либо оба.
Есть ли способ решить эту проблему без редактирования устаревшего модуля? Он широко используется, и любые изменения могут повлечь за собой некоторый рискпоэтому сначала я смотрю на альтернативы.
Я знаю, что мы можем сделать следующее, но это не останавливает другую строку Win32::OLE::Const
, вызывающую ошибку, если она не удалена.
my $Excel = Win32::OLE->new('Excel.Application', 'Quit');
my $xl = Win32::OLE::Const->Load($Excel);