我正在使用COM接口连接到通过TCP / IP连接到运行软件的计算机的外部设备。我发布这个,因为在一个系统上这个连接失败了,神秘。
从制造商那里,我收到了一个instrument.dll和一个instrument.tlb。不幸的是,细节和代码受到保密协议的约束,因此我只能提供伪代码。
我有两个最小的例子,一个关于Free Pascal(重要的一个,因为这是我正在开发的地方):
uses
Instrument_TLB; // Imported via the Lazarus "Import Type Library" function from the .tlb or the .dll
[...]
procedure TForm1.FormCreate(Sender: TObject);
begin
AInstrument := CoInstrument.Create;
if AInstrument.Connected then ...
end;
和Visual Basic上的一个,由制造商提供:
Private Sub Form_Load()
Set theInstrument = New Instrument
If theInstrument.Connected Then ...
End Sub
这个VB6项目有instrument.dll作为参考。
不同计算机上的行为如下(补充了Sysinternals Process Explorer中的信息):
系统A(Windows XP,32位,用于编译):FP和VB可执行文件都按预期工作,可以建立连接。在Process Explorer中,两个可执行文件都有一个带有instrument.dll的线程,并且可以看到TCP / IP连接已启动。
系统B(Windows 7,64位):FP和VB可执行文件都按预期工作,可以建立连接。没有使用Process Explorer。
系统C(Windows 7,64位):VB可执行文件按预期工作,可以建立连接。在Process Explorer中,VB可执行文件有一个带有instrument.dll的线程,可以看到TCP / IP连接已启动。 FP可执行文件无法连接,在执行资源管理器中看到两个线程与instrument.dll和无 TCP / IP连接。
我知道基于我能够提供的少量信息,没有人可以提出“解决方案” - 但是,如何进一步研究这个问题的建议,用于调试的工具将受到高度赞赏!
感谢您的时间。
答案 0 :(得分:0)
原来,系统C上的注册表包含了几个关于如何连接到乐器的条目,其中一个是IP地址略有错误。我不知道为什么我的32位FP软件和32位VB6测试应用程序使用了这个密钥,但改变IP地址是一个因素。
另一个因素是在Windows 7 SP1上以Windows 7的兼容模式运行软件。我不知道为什么这是必要的(因为它在系统B上的Windows SP1上没有兼容模式),但我想尽快摆脱它......