我以为我知道如何做到这一点,但显然不是,所以我会很感激一些帮助!我无法让我的 dll 注册,因此我可以在 VBS 或其他地方实例化它。
我编写了以下示例类,选中“使程序集 COM 可见”,选中“注册 COM 互操作”,然后构建它。当我尝试从 VBS 实例化它时,我收到“Activex 组件无法创建对象”错误。
这是类代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Smurf
{
public class Pants
{
public string Explode(bool Loud)
{
string result;
if (Loud)
result = "BANG";
else
result = "pop";
return result;
}
}
}
...这是 VBS:
Dim a
Set a = CreateObject("Smurf.Pants")
msgbox("ok")
我还需要做什么?
谢谢 :)
[编辑]
忘了提,在第一次失败后,我尝试了 REGSVR32 和 REGASM - 没有帮助!
[/编辑]
请注意,当我尝试 REGSVR32 时,会收到以下消息:
模块“C:...\Smurf.dll”已加载,但未找到入口点 DllRegisterServer。确保“C:...\Smurf.dll”是有效的 DLL 或 OCX 文件,然后重试。
这有多大帮助??
这是最新版本的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace Smurf
{
[Guid("EAA4976A-45C3-4BC5-BC0B-E474F4C3C83F")]
public interface IPants
{
[DispId(1)]
string Explode(bool Loud);
}
[Guid("7BD20046-DF8C-44A6-8F6B-687FAA26FA71"),
InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IPantsEvents
{
string Explode(bool Loud);
}
[ComVisible(true)]
[Guid("0D53A3E8-E51A-49C7-944E-E72A2064F938"),
ClassInterface(ClassInterfaceType.None),
ComSourceInterfaces(typeof(IPantsEvents))]
public class Pants : IPants
{
public Pants() { }
[ComVisible(true)]
[ComRegisterFunction()]
public static void DllRegisterServer(string key) { }
[ComVisible(true)]
[ComUnregisterFunction()]
public static void DllUnregisterServer(string key) { }
[ComVisible(true)]
public string Explode(bool Loud)
{
string result;
if (Loud)
result = "BANG";
else
result = "pop";
return result;
}
}
}