После просмотра этого видео я реализовал следующий класс тестового стенда:
Код: Выделить всё
namespace COMTestBedCS
{
[Guid("26a0aa6d-5aba-458f-92b4-b9a30ae0c65c")]
[GeneratedComInterface]
public partial interface ITestBed
{
int GetXPTO();
void SetXPTO(int value);
}
[Guid("3e178f98-522e-4e95-8a9c-6d80dc48b7d5")]
[GeneratedComClass]
public partial class TestBed : ITestBed
{
private int _XPTO = 1024;
public int GetXPTO() => _XPTO;
public void SetXPTO(int value)=>_XPTO = value;
}
}
Если я попытаюсь использовать regsvr32, я получаю следующую ошибку:

Что я делаю не так?
Для завершения вот файл проекта:
Код: Выделить всё
net8.0
enable
enable
true
Мне удалось правильно скомпилировать код и зарегистрируйте его с помощью regsvr32. Однако я по-прежнему не могу сослаться на него в Excel.
Во-первых, я не могу найти его в списке ссылок. Если я попытаюсь найти dll (либо сборку, либо comhost), произойдет сбой с сообщением: Невозможно добавить ссылку на указанный файл.
Теперь осталось только добавить его в качестве ссылки в Excel VBA.
Новый код
Проект
Код: Выделить всё
COMTestBedCS
net8.0-windows
enable
enable
False
true
True
x86
x86
Код: Выделить всё
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.Marshalling;
namespace COMTestBedCS
{
[Guid("26a0aa6d-5aba-458f-92b4-b9a30ae0c65c")]
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface ITestBed
{
int GetXPTO();
void SetXPTO(int value);
}
[Guid("3e178f98-522e-4e95-8a9c-6d80dc48b7d5")]
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
internal class TestBed : ITestBed
{
private int _XPTO = 1024;
public int GetXPTO() => _XPTO;
public void SetXPTO(int value)=>_XPTO = value;
}
}
Код: Выделить всё
MSB3217
Cannot register assembly "" Could not load file or
assembly 'System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies.
The system cannot find the file specified.`
Только тогда проект успешно скомпилируется.
< hr />
Обновление 2
Если кто-то хочет помочь, я разместил этот тестовый проект на GitHub здесь.
Обновление 3
После предложения Саймона Мурье использовать dscom для создания и регистрации TypeLib, я смог добавить его в качестве ссылки в Excel.
Однако, когда я пытаюсь выполнить простой тест...
Код: Выделить всё
Sub Test()
Dim xpto As New COMTestBedCS.TestBed
Debug.Print xpto.GetXPTO()
End Sub
Подробнее здесь: https://stackoverflow.com/questions/783 ... -with-net8
Мобильная версия