我已在access-programmers.co.uk上交叉发布

请在该论坛上发布回复。

我已经在c#3.5 ..中编译了一个dll,在其中设置了解决方案属性以注册COM互操作的生成。

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

namespace SBG_TestWithVBA
{
  [ClassInterface(ClassInterfaceType.AutoDual)]

  public class TestHello
  {
    [ComVisible(true)]

    public string SayHello(string name)
    {
      string message = "Hello " + name;
      return message;
    }
    public string HelloWorld()
    {
      string message = "Hello World!";
      return message;
    }
  }
}


然后我使用以下命令注册了程序集和tlb文件


  “” C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ regasm.exe“” \ sbgfs01 \ users \ Vincent Pirolli \ My Docs \ Visual Studio 2008 \ Projects \ TestWithVBA \ TestWithVBA \ bin \ Release \ SBG_TestWithVBA.dll“ / tlb:“ \ sbgfs01 \ users \ Vincent Pirolli \ My Docs \ Visual Studio 2008 \ Projects \ TestWithVBA \ TestWithVBA \ bin \ Release \ SBG_TestWithVBA.tlb”


然后,从“工具”>“引用”菜单中将tlb文件添加到vba中。

我的VBA代码如下:

Sub test()
    Dim f As SBG_TestWithVBA
    Set f = New SBG_TestWithVBA
    f.HelloWorld
End Sub


即使Intellisense在VBA编辑器中工作,我也会收到以下错误消息:
“自动化错误
该系统找不到指定的文件。”

任何人有任何想法吗?我在以前的帖子中有文章,但是找不到解决方案。



好的,这真让我讨厌。

我设法使它工作..但我不明白为什么..

在Visual Studio的解决方案属性中。在“构建”选项卡上,将“注册COM互操作”设置为true,在“应用程序>装配信息”中,将“使装配COM-Visible” = TRUE。

我在共享驱动器中有VS项目文件。现在,如果我将构建位置设置为共享驱动器上项目文件夹下的bin文件夹,则当我从VBA调用时它不起作用。但是,如果我将构建文件夹设置为本地C驱动器上的文件夹,则它将从VBA调用时工作正常。

有任何想法吗?

最佳答案

您正在注册的程序集似乎在网络共享上。在这种情况下,.net程序集具有不同的安全模型。

您是否尝试过将程序集和TLB放在本地目录中,然后在“工具”>“引用”菜单中添加TLB?

另外-这可能完全不合时宜-但是DLL是否需要在RegSvr32中注册,以便可寻址?

10-06 10:36