У меня есть файл exe «ClarityII.exe», поставляемый поставщиком продукта для мониторинга погоды (Boltwood Cloud Sensor II). Приложение предоставляет графический интерфейс для отображения и управления состоянием датчика и предоставляет COM-интерфейс для интеграции с другим программным обеспечением. До сих пор я не получаю никакой помощи от поставщика. Я считаю, что это было написано на VB6.NOINTERFACE Exception, создающий экземпляр COM-компонента с C#
Я пытаюсь использовать COM-интерфейс из VS2013 .NET 4.5.1 C#. Поставщик поставил очень простой тест VB6, который отлично работает.
Я добавил требуемую ясностьII ссылку на мой проект C#. Сниженный код ниже компилируется, и когда я его запускаю, графический интерфейс поставщика отображается, как ожидалось, но я получаю исключение ниже.
Исключение происходит, когда cloudII создается с помощью нового:
Необработанное исключение типа «System.InvalidCastException» произошло в Interop1.exe
Дополнительная информация: Не удается привести COM-объект типа «System. __ComObject 'для интерфейса типа ClarityII.CloudSensorII. Эта операция завершилась неудачно, потому что вызов QueryInterface на COM-компоненте для интерфейса с IID '{XXXXXXXXX-XXXX-XXXX-XXXXXXXXXXXXXXXX} не удался из-за следующей ошибки: такой интерфейс не поддерживается (исключение из HRESULT: 0x80004002 (E_NOINTERFACE)) ,
Что может вызвать эту ошибку? Я думал, что interop был сделан для меня компилятором, автоматически создающим оболочку Interop.ClarityII.dll?
У меня есть следующий скелет
using System;
using ClarityII;
class MainClass
{
[STAThread]
public static void Main(string[] args)
{
ClarityII.CloudSensorII cloudII;
cloudII = new ClarityII.CloudSensorII();
}
}
PS редактирования: Я просто пробежал программу C# на другом компьютере с тем же ClarityII.exe установлен. На этом ПК нет исключения, когда я создаю экземпляр COM-объекта. Я также могу получить доступ к свойствам OK. Любые идеи, которые могут быть повреждены на моем компьютере?
Обфускация числа в сообщении об исключении, подобное тому, что является невероятно тупой идеей. Мало того, что это бессмысленно, это вызывает серьезное сомнение в том, что еще вы нам не рассказываете. Для этого исключения нет пояснения к предоставленной информации, используйте другую машину. –
Я новичок здесь. В моих поисках я видел, как другие это делали, поэтому я подумал, что, возможно, это показало то, что я не должен. Я возьму диверсию, чтобы рассказать о происхождении каждой части IID. –
Идентификаторы интерфейса (GUID, который вы скрывали) не являются конфиденциальной информацией.Это просто уникальный номер, назначенный поставщику интерфейсу, так что никто другой не смутил бы его каким-либо другим интерфейсом от какого-либо другого поставщика. –