0

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

我创建了一个 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 位。

4

1 回答 1

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”,也不会出现问题。

于 2013-04-01T18:56:41.700 回答