对于有关此问题背景的模糊信息感到抱歉,首先我正在使用的实际类型库受制于非披露协议,其次我无法直接访问发生问题的系统。< / p>
对于我在Free Pascal中讨论的设备的COM接口,我有类似下面的TLB:
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 32位上的一个传感器的值,如下所示
d := MyDevice.Subsystem.Sensors['ID23'].Value;
这很好。
在Windows 7 64位上,制造商仍然有一个32位COM接口,而我的32位exectuable的所有其他调用工作正常 - 只是上面的那个使我的可执行文件崩溃。它甚至没有引发异常,只是崩溃了。
也是如此var o: oleVariant;
// ...
o = 'ID23';
d := MyDevice.Subsystem.Sensors[o].Value;
由于我无法直接访问所述系统,因此调试非常繁琐,需要一段时间才能将问题完全隔离到此调用。
有趣的是,在Win7 64bit 上使用相同COM接口的其他编程语言不会显示此问题。
是否有人就如何在特定情况下处理此问题提出建议?
答案 0 :(得分:0)
我只能给你一些指示,试着/警惕: