【问题标题】:C# and VBScript InteroperablityC# 和 VBScript 互操作性
【发布时间】:2015-02-17 18:55:10
【问题描述】:

我正在尝试创建一个我的 vbscript 可以与之交互的 C# dll。但是,当我尝试实例化对象时出现错误:“找不到服务器”

这是我的 C# 代码:

using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

[assembly:System.CLSCompliant(true)]
[assembly: ComVisible(true)]
[assembly:Guid("a22f4018-8f32-4c02-a748-6701fb617aa3")]


namespace InteropTesting
{
    [Guid("a22f4018-8f32-4c02-a748-6701fb617aa3")]
    public class TestReply
    {
        public string salutation;
        public string name;
        public string time;
    }

    [Guid("a22f4018-8f32-4c02-a748-6701fb617aa3")]
    public class TestObj
    {
        public TestObj() { }

        public TestReply SayHello(string addressee)
        {
            return SayHello(addressee, "hello");
        }

        public TestReply SayHello(string addressee, string greeting)
        {
            string x = String.Format("{0}, {1}!", greeting, addressee);
            Console.WriteLine("{0}", x);

            TestReply r = new TestReply
            {
                salutation = greeting,
                name = addressee,
                time = System.DateTime.Now.ToString("u")
            };
            return r;
        }
    }
}

这是我的 vbscript:

Sub Main
    Dim obj
    Dim reply
    Set obj = CreateObject("InteropTesting.TestObj")
    Set reply = obj.SayHello("Evgeny")
    Debug.Print "Reply at: " & reply.Time
    Set reply = obj.SayHello_2("Evgeny", "wassup")
    Debug.Print "Reply at: " & reply.Time
End Sub

我使用 Visual Studio“签名”属性创建了 SNK,然后从 Visual Studio 命令提示符运行以下命令:

csc.exe /t:library /debug+ /keyfile:InteropTesting.snk/out:InteropTesting。 dll Program.cs

我不确定我做错了什么。

【问题讨论】:

  • 至少您需要为程序集和两个类使用不同的 GUID。你是registering the assembly with COM吗?
  • @DStanley 那是我忘记做的!非常感谢!
  • @DStanley 如果我想在我的 SayHello 函数中运行一个表单,该表单是否还需要 GUID?而且,文件的构建动作是否需要是“内容”
  • 我不确定您是否可以从 COM 组件创建表单 - 如果/当您遇到问题时,您可以尝试并发布另一个问题。
  • 将发布一个新问题。谢谢

标签: c# vbscript interop com-interop


【解决方案1】:

为了使用 COM 组件,它需要是registered。这样系统就知道在哪里可以找到特定组件的代码,

此外,您需要为程序集、每个接口和每个类使用不同的 GUID。 GUID 用于唯一 COM 类、接口和类型库(大致相当于 .NET 程序集的 COM 等效项)。并且不要仅通过更改一个“数字”来手动创建 GUID。 Visual Studio 在“工具”菜单中包含一个GUID Generator,它将为您生成一个唯一的 GUID。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多