0
对不起,关于这个问题的背景含糊不清的信息,首先我正在使用的实际类型库受到不公开的协议,第二我没有直接访问系统出现问题。COM调用XP崩溃Win7应用程序
我有类似下面的TLB因为我在Free Pascal中谈论到设备的COM接口:
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位可执行文件的所有其他调用工作正常 - 只是上面的一个使我的可执行文件崩溃。它甚至没有引发异常,它只是崩溃。与
var o: oleVariant;
// ...
o = 'ID23';
d := MyDevice.Subsystem.Sensors[o].Value;
同样的情况,因为我没有访问该系统直接,调试是相当繁琐和我花了一段时间来将问题隔离到正是这个电话。
有趣的是,Win7 64bit的其他编程语言使用相同的COM接口不需要显示这个问题。
有没有人有建议如何在特定情况下解决这个问题?