Выставить dll для COM Interop
Я думал, что знаю, как это сделать, но, очевидно, не так, я был бы признателен за некоторую помощь! Я не могу зарегистрировать свою 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, я получаю следующее сообщение:
The Module "C:...\Smurf.dll" was loaded but the entry-point DllRegisterServer was not found. Make sure that "C:...\Smurf.dll" is a valid DLL or OCX file and then try again.
Насколько это полезно?
Это последняя версия кода:
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;
}
}
}