C# 和 VBScript 互操作性
C# and VBScript Interoperablity
我正在尝试创建一个我的 vbscript 可以与之交互的 C# dll。但是,当我尝试实例化对象时出现错误:"Server could not be found"
这是我的 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 "Signing" 属性 创建了 SNK,然后在 Visual Studio 命令提示符下 运行 以下命令:
csc.exe /t:library /debug+ /keyfile:InteropTesting.snk/out:InteropTesting. dll Program.cs
我不确定我做错了什么。
为了使用 COM 组件,它需要 registered。这样系统就知道在哪里可以找到特定组件的代码,
此外,您需要为程序集、每个界面和每个class使用不同的GUID。 GUID 用于唯一 COM classes、接口和类型库(大致相当于 .NET 程序集的 COM)。并且不要通过更改一个 "digit" 来手动创建 GUID。 Visual Studio 在 "Tools" 菜单中包含一个 GUID Generator,它将为您生成一个唯一的 GUID。
我正在尝试创建一个我的 vbscript 可以与之交互的 C# dll。但是,当我尝试实例化对象时出现错误:"Server could not be found"
这是我的 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 "Signing" 属性 创建了 SNK,然后在 Visual Studio 命令提示符下 运行 以下命令:
csc.exe /t:library /debug+ /keyfile:InteropTesting.snk/out:InteropTesting. dll Program.cs
我不确定我做错了什么。
为了使用 COM 组件,它需要 registered。这样系统就知道在哪里可以找到特定组件的代码,
此外,您需要为程序集、每个界面和每个class使用不同的GUID。 GUID 用于唯一 COM classes、接口和类型库(大致相当于 .NET 程序集的 COM)。并且不要通过更改一个 "digit" 来手动创建 GUID。 Visual Studio 在 "Tools" 菜单中包含一个 GUID Generator,它将为您生成一个唯一的 GUID。