c # — System.TypeLoadException при попытке создать экземпляр C ++ COM-объекта внутри пользовательского AppDomain

Я пытаюсь динамически загрузить COM-объект внутри пользовательского AppDomain.

Поэтому я сделал этот код, который работает с C # COM-объектом, но не работает с C ++ COM-объектом.

Type addinComType = Type.GetTypeFromCLSID(Guid.Parse(guid));
string basePath = Directory.GetParent(addinComType.Assembly.Location).FullName;
string dllName = Path.GetFileNameWithoutExtension(addinComType.Assembly.Location);
string completePath = addinComType.Assembly.Location;
string typeName = addinComType.Name;AppDomainSetup setup = new AppDomainSetup()
{
ApplicationBase = basePath,
ApplicationName = dllName,
ConfigurationFile = dllName + ".dll.config",
PrivateBinPath = $"{basePath};{AppDomain.CurrentDomain.SetupInformation.ApplicationBase}"};

AppDomain customDomain = AppDomain.CreateDomain(guid, null, setup);
ObjectHandle objectHandleFromCustomDomain = customDomain.CreateComInstanceFrom(completePath, typeName); //Thrown exception
object addinObjectFromCustomDomain = objectHandleFromCustomDomain.Unwrap();
MethodInfo myAddinMethodFromCustomDomain = addinObjectFromCustomDomain.GetType().GetMethod("connectToAPI");
myAddinMethodFromCustomDomain.Invoke(addinObjectFromCustomDomain, new object[] { null });

Этот код генерировать

System.TypeLoadException: Impossible to load type '__ComObject' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
à System.Reflection.RuntimeAssembly.GetType(RuntimeAssembly assembly, String name, Boolean throwOnError, Boolean ignoreCase, ObjectHandleOnStack type)
à System.Reflection.RuntimeAssembly.GetType(String name, Boolean throwOnError, Boolean ignoreCase)
à System.Activator.CreateComInstanceFrom(String assemblyName, String typeName, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm)
à System.AppDomain.CreateComInstanceFrom(String assemblyName, String typeName)
à System.AppDomain.CreateComInstanceFrom(String assemblyName, String typeName)
à ConsoleApp1.AddinLoader.LoadAddin(String guid) dans C:\Users\me\Documents\Visual Studio 2017\Projects\ConsoleApp1\ConsoleApp1\AddinLoader.cs:ligne 113
  • Приложение C # и мой C ++ COM-объект создаются в режиме X64.
  • Работает, если я создаю экземпляр в домене по умолчанию, как ((API.AddIn)Activator.CreateInstance(addinComType)).connectToAPI(null)

Так что я не знаю, откуда эта проблема.

В C # мой COM-объект наследуется от MarshalByRefObject может быть, мне нужно что-то подобное для C ++ COM-объекта?

Так что если у вас есть идеи,
Заранее спасибо за помощь

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector