【问题标题】:C# COM DLL with Office 2010 64 bitC# COM DLL 与 Office 2010 64 位
【发布时间】:2013-03-22 20:37:09
【问题描述】:

我可能会重新发布,但我找不到解决方案。

我创建了一个 C# Comvisible 类。这是以下类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace COMTrial
{

    [Guid("2B71BC1B-16F5-4A0D-A015-CAE658A10B07")]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface IMyExample
    {
        string GetData();
    }

    [ClassInterface(ClassInterfaceType.AutoDual), ComSourceInterfaces(typeof(IMyExample))]
    [Guid("2B71BC1B-16F5-4A0D-A015-CAE658A01B07")]
    [ComVisible(true)]
    public class Class1
    {

        public Class1()
        {
        }
        [ComVisible(true)]
        public string GetData()
        {
            return "Vikas";
        }
    }
}

然后我检查了 Register for Interop 选项,甚至使完整的程序集可见并编译项目和解决方案。

然后我去excel写了这段代码:

Dim a as Object

set a = CreateObject("COMTrial.Class1")

它说,

ActiveX 无法创建对象。

我想到的唯一原因是我正在运行 Office 2010 64 位和 Windows 7 64 位。

【问题讨论】:

  • 此链接可能提供一些信息:officepreview.microsoft.com/en-us/support/…
  • 你是 writing C# code or VB.NET Code or a mixture..? 吗?如果它是一个混合体......你在标题部分的 using Microsoft.VisualBasic 行在哪里......?
  • 并非如此。我相信我缺乏的是在 64 位环境中注册 DLL 的理解。连网上的文章都没有详细的解释。
  • @ Kraze,我使用的是纯 C#。并尝试从 Excel 调用函数
  • 如果您还添加了 64 位。基本上 Office 64bit 只能加载 64bit dll

标签: c# com ms-office


【解决方案1】:

然后我检查了注册互操作选项

这只会将您的程序集注册为 32 位进程。由于这是 64 位版本的 Office,您需要手动运行 Regasm.exe。从 Visual Studio 命令提示符执行此操作,从“以管理员身份运行”开始。请务必使用 64 位版本的 Regasm.exe,对于 .NET 4,它默认位于 C:\Windows\Microsoft.NET\Framework64\v4.0.30319。注意 64. 使用 /tlb 和 /codebase 选项来匹配 IDE 的行为。

另一个改进是显式使用 [ProgId] 属性,这样您就不必猜测名称,如果项目名称不是“COMTrial”也不会有问题。

【讨论】:

  • 该死,Visual Studio 只注册 32 位 DLL,微软太蹩脚了。我认为您对 64 位 DLL 很了解。我注册了 DLL 并使用 64 位 RegASM 导出了 TLB。它说注册成功并且tlb也被创建了。但是,它说自动化错误。文件名无效。然后我打开进程监视器并找不到任何东西,整个类并不真正依赖于任何其他 DLL,因为它只有一个要从 COM 调用的示例函数。我不确定我在这里做错了什么。
  • 好的。解决了。我不确定是否有人会如此愚蠢。我在错误的地方使用了代码库关键字。我真正在寻找的是为什么即使在我检查了 Com Interop 的注册器之后,Visual Studio 也没有注册 DLL。但是宾果游戏,你刚刚回答了它。谢谢!
猜你喜欢
  • 2013-03-02
  • 1970-01-01
  • 2012-05-28
  • 2011-05-12
  • 1970-01-01
  • 2012-05-22
  • 2013-03-24
  • 1970-01-01
  • 2020-01-02
相关资源
最近更新 更多