Я создаю тестовый проект, чтобы увидеть, как я могу создать видимую для ком dll и использовать ее приложением vb6, но сейчас мое приложение, которое использует видимые коммандные библиотеки dll, является c # с поздним связыванием.
Я создал 2 теста.
один, в котором я установил сборку в comvisible с помощью buildmblies.cs и в свойствах проекта, т. Е. Зарегистрируйтесь для com interop
Другой Iиспользованные атрибуты для украшения моих методов
using System;
using System.Runtime.InteropServices;
namespace ComTestAsm
{
[Guid("54AEB269-82E8-4B73-BBE6-57A28A0E7DFD")]
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("ComTestAttr")]
public class Hello
{
public string SayHello()
{
return "Hello";
}
}
}
Мой тестовый код выглядит следующим образом
using System;
using System.Reflection;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var s = Type.GetTypeFromProgID("ComTestAsm");
var t = Type.GetTypeFromProgID("ComTestAttr");
var inst2 = Activator.CreateInstance(s);
var inst = Activator.CreateInstance(t);
string result = (string)inst.GetType().InvokeMember("SayHello", BindingFlags.InvokeMethod, null,inst,null);
}
}
}
ComTestAsm (set com, видимый в свойствах) работает нормально, но ComTestATTR (используя атрибуты) делаетне работает
Я получаю файл ошибки, не найденный при сравнении ключей reg.Я вижу, что ComTestAsm имеет ключ CodeBase с путем к файлу, а другой нет.Я использовал [это] [1] в качестве ссылки.Я хочу, чтобы он работал с атрибутами, и мне не нужно устанавливать его в форме свойств проекта.
Спасибо