COM接口 - 与设备的连接失败

时间:2014-08-21 19:04:53

标签: delphi tcp com vb6 freepascal

我正在使用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连接。

我知道基于我能够提供的少量信息,没有人可以提出“解决方案” - 但是,如何进一步研究这个问题的建议,用于调试的工具将受到高度赞赏!

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

原来,系统C上的注册表包含了几个关于如何连接到乐器的条目,其中一个是IP地址略有错误。我不知道为什么我的32位FP软件和32位VB6测试应用程序使用了这个密钥,但改变IP地址是一个因素。

另一个因素是在Windows 7 SP1上以Windows 7的兼容模式运行软件。我不知道为什么这是必要的(因为它在系统B上的Windows SP1上没有兼容模式),但我想尽快摆脱它......