首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AnyCPU COM库(.tlb文件)在从x64中的外部VB6宏调用时无法工作

AnyCPU COM库(.tlb文件)在从x64中的外部VB6宏调用时无法工作
EN

Stack Overflow用户
提问于 2014-11-13 07:58:48
回答 1查看 1.3K关注 0票数 1

好吧,我的头衔可能不够清楚。我使用的是一个我们可以开发VB6宏的应用程序。这个宏需要使用我开发的.NET dll。当我以x86模式启动应用程序并尝试运行宏时,它运行良好,我可以访问类的方法和所有东西。

但是,当我在x64模式下做同样的操作时,我会得到错误:"Automation server can't create object"

真正奇怪的是,我是而不是,使用任何x86非托管COM dll,这将是x64体系结构的一个问题。当我这样做:"Dim myClass as new MyClass.App"时,它是工作的,但是当我调用一个myClass.Start()方法时,我得到了这个错误。我试着在我的MsgBox('hello world')方法中使用一个Start,以确定它与我的代码无关,仍然没有成功。我用一个TLB文件将宏链接到我的类。

我试着用RegAsm注册我的DLL,但它在x64中仍然不起作用。有没有办法同时生成x86和x64版本的TLB?然后,我将添加两个引用,如果x64版本在Start方法上抛出一个错误,我只需调用x86方法(不是一个完美的解决方案,但仍然是.)。

知道怎么解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-19 15:19:01

正如汉斯所说,我需要使用64位版本的Regasm.exe。尽管我已经尝试过在安装后手动启动RegAsm,但它没有工作。首先,我补充说,在我的项目的构建后事件中:

代码语言:javascript
复制
"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe" "$(TargetPath)"

这对Debug版本起了作用。奇怪的是,AnyCPU版本最初在我的x64应用程序上运行良好,在调试模式下,当我创建安装项目时,它开始崩溃(不知道为什么.)。但是在安装应用程序时,这个更改并没有解决我的问题,所以我在我的自定义操作的“提交”中添加了这一点(基于本文:在visual studio中通过windows安装程序实现的Regasm- 64位或32位):

代码语言:javascript
复制
   Public Overrides Sub Commit(savedState As System.Collections.IDictionary)
        MyBase.Commit(savedState)

        'Check if we're on a x64 OS
        If Environment.Is64BitOperatingSystem Then
            'Get the Windows dir on the current computer
            Dim winDir As String = New IO.DirectoryInfo(Environment.SystemDirectory).Parent.FullName

            'Define the path to regasm for x64 machines
            Dim regasmPath As String = IO.Path.Combine(winDir, "Microsoft.NET", "Framework64", System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion, "RegAsm.exe")

            If File.Exists(regasmPath) Then 'Si le chemin existe, on enregistre la DLL
                'Get the location of our DLL
                Dim componentPath As String = GetType(Installer).Assembly.Location

                'Executes regasm
                System.Diagnostics.Process.Start(regasmPath, "/codebase """ & componentPath & """")
            End If
        End If
    End Sub

我从最初的文章中改变的是通往RegAsm的路径。由于我的设置是x86,运行时环境的目录指向了“Microsoft.NET\Framework.”路径不是"Framework64“,它违背了我的操作目的(它已经注册为32位COM互操作),所以我尝试获得x64版本的RegAsm并运行它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26903937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档