У меня есть библиотека .NET, и я хочу обернуть ее COM, чтобы вызывать ее функции из C ++. К счастью, эта библиотека с открытым исходным кодом, и если я добавлю COM-видимый класс прямо в этом проекте — она работает:
[Guid("38F752CC-20F1-4729-B1E3-EE0AAD145052")]
public interface IQRCodeUI
{
string GetDecodedString(string encodedString);
}
[Guid("D4CFCDFA-6718-494D-A23F-EBC0F9550377")]
public class QRCodeUI : IQRCodeUI
{
public string GetDecodedString(string encodedString)
{
return decoder.decode(encodedString);
}
}
decoder
это класс из этой самой библиотеки.
Но что делать в случае, если бы я собрал сборку? Я попытался создать библиотеку классов (COM) и добавить библиотеку .NET в качестве встроенного ресурса. Без результатов! Во время компиляции он сказал что-то вроде cannot register assembly "path\name". Cannot load file or assembly "nameOfAssembly" or its dependency. Cannot find the file.
Извините, я не могу предоставить оригинальный текст ошибки, потому что у меня MSVS, язык которого отличается от английского. Возможно ли решить эту проблему?
Если ваша задача — вызывать библиотеку .NET из C ++ через COM, почему вы добавляете библиотеку .NET в качестве встроенного ресурса в какую-то новую библиотеку классов COM?
Просто сделайте существующую стороннюю сборку видимой для COM и вызывайте ее из C ++, VB6 и т. Д.
По всему Интернету есть несколько документов, как сделать сборку .NET видимой в COM. Насколько я помню, ни один из них не содержит рекомендаций по внедрению сборки .NET в сборку класса COM.
Начните с:
Лучшие практики в написании COM-Visible Assembly (C #)