Извините, о какой-то неопределенной информации об этом вопросе, сначала в библиотеке фактического типа, с которой я работаю, предоставляется соглашение о неразглашении, во-вторых, у меня нет прямого доступа к система, в которой происходит эта проблема.COM-вызов, работающий с ошибками XP Приложение Win7
У меня есть что-то вроде следующего TLB для COM-интерфейса устройства я говорю в Free Pascal:
Device = interface(IDispatch)
// ...
function GetSubsystem: Subsystem; safecall;
property Subsystem: Subsystem read GetSubsystem;
// ...
end;
Subsystem = interface(IDispatch)
// ...
function GetSensors: Sensors; safecall;
property Sensors: Sensors read GetSensors;
// ...
end;
Sensors = interface(IDispatch)
// ...
function GetListItem(index: OleVariant): Sensor; safecall;
property ListItem[index: OleVariant]: Sensor read GetListItem; default;
// ...
end;
Sensor = interface(IDispatch)
// ...
function GetValue: Double; safecall;
property Value: Double read GetValue;
// ...
end;
Если я прочитал (в соответствии с инструкцией изготовителя) значение одного из датчиков на Windows XP 32bit следующим образом:
d := MyDevice.Subsystem.Sensors['ID23'].Value;
это работает нормально.
В Windows 7 64 бит у производителя по-прежнему имеется 32-битный COM-интерфейс, а все остальные вызовы из моего 32-разрядного exectuable работают нормально - только одно выше делает мой исполняемый сбой. Он даже не вызывает исключения, он просто падает. То же самое происходит с
var o: oleVariant;
// ...
o = 'ID23';
d := MyDevice.Subsystem.Sensors[o].Value;
Как у меня нет доступа к указанной системе напрямую, отладка довольно утомительно, и мне потребовалось некоторое время, чтобы изолировать проблему именно этого вызова.
Интересно, что другие языки программирования с использованием этого же COM-интерфейса на Win7 64bit не показать эту проблему.
Есть ли у кого-нибудь советы относительно того, как подойти к этой проблеме при данных обстоятельствах?