Я несколько часов бьюсь над этим и не могу понять, что я делаю не так.
Я создал новый проект C # dll, вот содержимое единственного класса, который он содержит:
using System;
using System.Runtime.InteropServices;
namespace PolygonSl {
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.AutoDual)]
public class Config {
[ComVisible(true)]
public string GetCompany() {
return "POL";
}
}
}
Я в основном удаляю из него все, пытаясь заставить его работать, единственная ссылка - System
.
Я установил флаг Make assembly COM-Visible
на Assembly Information
, и мой проект подписан (швы необходимы для кодовой базы).
Он прекрасно компилируется, после этого я позвонил RegAsm.exe
, дав ему dll, добавил /codebase
и /tlb
, команда выполнена успешно.
Когда я иду в свой проект VBA, я могу добавить мой новый файл tlb к ссылкам, работающий нормально. После этого я могу использовать его в своем коде, автозаполнение работает, и я могу скомпилировать без ошибок.
Затем, когда я выполню, я получил это:
Run-time error '430':
Class does not support Automation or does not support expected interface
Вот мой пример кода в VBA:
Private Sub Button1_Click()
'With CreateObject("PolygonSl.Config")
With New PolygonSl.Config
MessBox .GetCompany, MB_OK, "Test"
End With
End Sub
Я пытался с поздним связыванием, и мой код нормально с ним работает, но я хотел бы иметь возможность использовать автозаполнение.
У кого-нибудь есть предложение о том, что я мог бы попытаться заставить его работать?
Редактировать (добавить некоторые подробности о моем окружении)
- Я работаю над VS2008 для проектов, связанных с Dynamics SL (одна из ERP-систем Microsoft)
- Я нахожусь на Windows Server 2008 R8 Standard, работающем от VMWare
- Компиляция на Framework 3.5, Release, x86, клиент Dynamics SL - 32 бита
- Я попробовал мою dll на динамике, но также и на Excel, чтобы убедиться, что проблема не в динамике;)