【问题标题】:Can I call a static method of a C# class from VB6 via COM?我可以通过 COM 从 VB6 调用 C# 类的静态方法吗?
【发布时间】:2015-06-22 22:37:00
【问题描述】:

我希望能够像使用静态类一样使用这个 COM 类,并从 VB6 应用程序静态调用方法/函数。这是我目前的课程:

using System;
using Linq;
using System.Runtime.InteropServices; 

namespace VNDBUtils
{
    [ComVisible(true)]
    public static class BracketString(){

      [ComVisible(true)]
      public static string HellowWorld(){

          get{
            return "Hello World";
          } 
      }
   }
}

这是我目前在 VB6 中调用该类的方式,我正在创建该类的一个对象并以这种方式调用它。但是,既然该类是静态的,我不确定要使用的确切语法。

我原本以为可以使用下面的语法来调用它:

Dim test As VNDBUtils
test.BracketString.HelloWorld(); 

但是,这给了我一个错误,所以如果有人可以给我一个示例,说明如何从 Visual Basic 2006 应用程序静态调用此类。谢谢!

【问题讨论】:

  • 您不能将命名空间名称存储在变量中。您必须使用Imports 或将其写出来,如 VNDBUtils.BrackString.HelloWorld()
  • @HansPassant 谢谢,但这给了我以下错误:找不到方法或数据成员。由于某种原因,它看不到我的 BracketString 方法?
  • 你必须发布真正的代码而不是这个无意义的 sn-p 才能对潜在问题做出正确的猜测。
  • 您没有使用您发布的确切代码,它无法编译。所以我不可能猜到它真正的样子。甚至不清楚使用 [ComVisible(true)] 的意义何在。
  • 那是不可能的,COM 必须能够创建该类的实例。所以它不能是一个静态类

标签: c# .net dll vb6 com-interop


【解决方案1】:

使用static 关键字:

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(BrackString.HelloWorld());
            Console.Read();
        }
    }

    public static class BrackString
    {
      public static string HelloWorld()
      {
            return "Hello World" ;
      }
   }
}

如果不使用static,您将不得不创建一个BrackString 类的新对象,如下所示:

BrackString brackString = new BrackString();
Console.WriteLine(BrackString.HelloWorld());

所以没有必要“Dim VNDBUtils”,静态方法的重点是它无需实例化即可使用。注意类名不带括号,程序行后面要加分号!

【讨论】:

  • 对不起,我的类名和字符串中确实有静态,我只是忘了在上面的示例中写下它。我应该只将字符串设为静态吗?
  • 是的,字符串应该是静态的。我已经用我测试过的控制台应用程序中的静态方法更新了我的答案。
  • 因此我的类不需要是静态的?因为这是我创建的 dll,我将从 vb6 程序调用该方法。
  • 静态方法和类在没有实例化的情况下始终可用。因此,您不必严格要求将类设为静态,但如果它内部没有非静态成员,那么这样做是有意义的。
  • 对不起,我看到你用 c# 标记了它,所以我以为它是用 c# 编写的。我将更新它以在 VB6 中工作,但我建议您删除该标签,以免将来的用户感到困惑!
猜你喜欢
  • 2014-08-03
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-12
  • 1970-01-01
相关资源
最近更新 更多