仅在Windows 2003 x64上的单独线程上使用COM对象时的TYPE_E_CANTLOADLIBRARY

时间:2010-02-04 22:05:13

标签: interop windows-server-2003 64-bit

我有一个访问COM对象的Windows窗体应用程序(编译为x86)。当代码在单独的线程上运行时,它在Windows 2003 x64上给出了以下错误 only

在创建IDoc期间出现异常:无法将“PTISG.COM.TeklogixQueue.QueueClass”类型的COM对象强制转换为接口类型“PTISG.COM.TeklogixQueue._Queue”。此操作失败,因为由于以下错误,对IID为“{3CBD7297-27D8-11D6-B75D-00902761DFA4}”的接口的COM组件的QueryInterface调用失败:加载类型库/ DLL时出错。 (HRESULT异常:0x80029C4A(TYPE_E_CANTLOADLIBRARY))

代码如下:

Private Sub Button3_Click(...)
    If _separateThreadCheckBox.Checked Then
        Dim t As Thread
        t = New Thread(AddressOf Me.CreateQueue)
        t.Start()
    Else
        Me.CreateQueue()
    End If
End Sub

CreateQueue()看起来像这样:

Dim q As New TeklogixQueue.Queue    q.Object = ....'必须使用对象

我在不同的操作系统上尝试了相同的代码,结果如下:

  • Windows 7 x64。作品。
  • Windows 2008 x64。作品。
  • Windows 2003 R2 Server Standard x64。 失败。

如果我不在单独的线程上执行代码,那么它适用于所有平台。

我使用ProcessMonitor捕获该接口ID的注册表读取,这是Windows 2003与Windows 7之间的一个区别:

Windows 2003:

“1:09:13.2616131 PM”,“IDocSend.exe”,“2704”,“RegOpenKey”,“HKCU \ Software \ Classes \ Wow6432Node \ Interface {3CBD7297-27D8-11D6-B75D-00902761DFA4}”,“名称未找到“,”“

“1:09:13.2616360 PM”,“IDocSend.exe”,“2704”,“RegOpenKey”,“HKCR \ Wow6432Node \ Interface {3CBD7297-27D8-11D6-B75D-00902761DFA4}”,“SUCCESS”,“ “

“1:09:13.2617100 PM”,“IDocSend.exe”,“2704”,“RegQueryKey”,“HKCR \ Wow6432Node \ Interface {3CBD7297-27D8-11D6-B75D-00902761DFA4}”,“SUCCESS”,“查询:名称“

Windows 7:

“1:10:01.6212010 PM”,“IDocSend.exe”,“4548”,“RegOpenKey”,“HKCU \ Software \ Classes \ Wow6432Node \ Interface {3CBD7297-27D8-11D6-B75D-00902761DFA4}”,“名称未找到“,”所需访问:读取“,”32位“

“1:10:01.6212518 PM”,“IDocSend.exe”,“4548”,“RegOpenKey”,“HKCR \ Wow6432Node \ Interface {3CBD7297-27D8-11D6-B75D-00902761DFA4}”,“SUCCESS”,“所需访问:读取“,”32位“

“1:10:01.6212927 PM”,“IDocSend.exe”,“4548”,“RegSetInfoKey”,“HKCR \ Wow6432Node \ Interface {3CBD7297-27D8-11D6-B75D-00902761DFA4}”,“成功“,”KeySetInformationClass:KeySetHandleTagsInformation,Length:0“,”32-bit“

“1:10:01.6213324 PM”,“IDocSend.exe”,“4548”,“RegQueryKey”,“HKCR \ Wow6432Node \ Interface {3CBD7297-27D8-11D6-B75D-00902761DFA4}”,“SUCCESS”,“查询:名称“,”32位“

请注意,在Windows 7上,有一个额外的“RegSetInfoKey”调用。

此外,如果我不在单独的线程上运行,则ProcessMonitor中没有捕获任何内容。不知道为什么。

任何人都知道为什么这会在一个单独的线程上失败?

谢谢, 哈罗德

0 个答案:

没有答案