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

2024-02-20

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

创建 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() 看起来像这样:

调暗 q 作为新的 TeklogixQueue.Queue q.Object = .... '必须使用该对象

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

  • Windows 7 x64。作品。
  • Windows 2008 x64。作品。
  • Windows 2003 R2 服务器标准 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}","成功",""

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

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}","成功","所需的访问权限:读取","32位"

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

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

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

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

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

谢谢, 哈罗德


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TYPE_E_CANTLOADLIBRARY 仅当在 Windows 2003 x64 上的单独线程上使用 COM 对象时 的相关文章

随机推荐

  • 自定义 ng-enter 指令不将 $event 从 html 传递到控制器

    我正在使用一个自定义指令来检测用户何时按下 Enter 键 然后调用 ngSubmit 中调用的相同函数周围的表单元素 下面是我的问题的演示 我需要从控制器内访问事件 但它始终是未定义的 以前有人遇到过这个问题吗 问题是什么 为什么会发生这
  • 不等于(!=)运算符无法在 C++ 中正确使用 char [重复]

    这个问题在这里已经有答案了 该代码无法正常工作 请帮助我 即使我输入了正确的字符 它仍然要求 输入正确的数字 并且它不评估条件 include
  • xjc:两个声明导致 ObjectFactory 类中发生冲突

    运行以下命令xjc命令引发错误 xjc ftp ftp ncbi nih gov bioproject Schema Core xsd parsing a schema compiling a schema ERROR Two declar
  • cakePHP 重定向 $this->referer() 无法正常工作

    我有一个 TestController 视图文件 并在其中添加了评论表单 我的页面所在页面的 URL 是 www example com test view slug 现在评论表单发布在 URL www example com 上 comm
  • 即使上传了文件,Laravel Input::hasFile('image') 也会返回 false

    我有一个用于图像上传的表单字段 我用 files gt true 打开它 如下所示 Form label image Image Form file image 在我的控制器中 我想检查文件是否已上传并对其执行某些操作 if Input h
  • IDEA的logcat过滤器可以自动识别正在运行的应用程序吗?

    我找不到这个或 IDEA还没有像 Eclipse 很久以前那样实现了智能过滤器 当我看着logcatIDEA 11 中的选项卡 我没有看到它自动识别正在运行的应用程序并将其添加到All Messages 就像 Eclipse 对每个正在运行
  • JAR 文件不从 ext 加载类文件

    我在Linux系统上安装了JDK 1 6 JAVA HOME目录是 usr java jdk1 6 0 07 我在 Eclipse 上构建了 JAVA HOME 的路径 它通过 Eclipse 顺利运行并加载所有第三方 JAR 文件 usr
  • 预先添加文件的某些行

    我想创建一个脚本来注释掉 Mac OS X 主机文件中包含的行 com 还有一个可以扭转它 So this 127 0 0 1 foo com 127 0 0 1 bar com 127 0 0 1 baz 127 0 0 1 qux 会成
  • CouchDB 附件的自定义属性

    我试图在单个 CouchDB 文档中存储多个独立附件 并为每个附件分配任意属性 即描述 有这样做的约定吗 据我所知 我无法将它们插入 attachments直接构造 提前致谢 您无法修改其中的任何内容 attachments直接使用 因为它
  • 更新特定领域模型属性?

    如何仅更新某些领域模型属性 而不是尝试使用一次又一次地保存完整的领域模型copyToRealmOrUpdate public class User extends RealmObject PrimaryKey public String i
  • Python数据结构的内存大小

    如何找到Python数据结构的内存大小 我正在寻找类似的东西 sizeof 1 hello 2 world 如果它能递归地计算每件事 那就太好了 但即使是基本的非递归结果也有帮助 基本上我想了解各种实现选项 例如元组与元组 列表对比类在内存
  • Youtube IFrame API 来源不受信任

    正如标题所示 我正在使用 IFrame API 我一直在遵循指南API参考 https developers google com youtube iframe api reference 它对我有用 但我发现出现了一些警告并希望解决它们
  • 仅使外部白色透明

    我正在使用 imagick 和 php 来修改上传的图像 我想去除图像周围的白色 使其具有透明背景 使用这个 val 65535 15 val intval val 1 divide by 1 means accept full fuzz
  • 如何从oracle表的多个分区中选择数据

    我正在尝试从分区表中的多个分区中选择数据 它适用于单个分区 select from table partition ParititonName 但不能选择多个分区 select from table partitions Part1 par
  • 添加自定义转换类型以进行字符串格式化

    python 中是否有向字符串格式添加额外的转换类型 使用的标准转换类型 基于字符串的格式化是这样的s对于字符串 d我想要做的是添加一个新字符 我可以为其指定一个自定义处理程序 例如 lambda 函数 该处理程序将返回要插入的字符串 例如
  • 在 C# 中将列表设置为只读

    我有这个示例代码 我想要做的是使 Nums 值只能使用 AddNum 方法写入 namespace ConsoleApplication1 public class Person string myName N A int myAge 0
  • ExecutorService 超时但不阻塞主线程

    我想在有时间限制的后台执行一些工作 问题是 我不想阻塞主线程 简单的实现是有两个执行器服务 一个负责安排 超时 第二个负责完成工作 final ExecutorService backgroundExecutor Executors new
  • F# 如何捕获所有异常

    我知道如何捕获特定异常 如下例所示 let test zip archive candidate zip archive let rc try ZipFile Open candidate zip archive ToString ZipA
  • Laravel 5.8 中 Auth::user() 返回 null

    我的 Laravel 5 8 10 项目中遇到身份验证问题 我没有使用 Laravel 创建的默认表单进行身份验证 当我在浏览器中访问 URL 仪表板时 通常用户会在登录时获得重定向 无论如何 应用程序允许它 另外当我使用时Auth use
  • TYPE_E_CANTLOADLIBRARY 仅当在 Windows 2003 x64 上的单独线程上使用 COM 对象时

    我有一个访问 COM 对象的 Windows 窗体应用程序 编译为 x86 它给了我以下错误 only在 Windows 2003 x64 上 当代码在单独的线程上运行时 创建 IDoc 期间出现异常 无法将类型 PTISG COM Tek