2016-11-07 5 views
0

У меня есть файл 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. Любые идеи, которые могут быть повреждены на моем компьютере?

+1

Обфускация числа в сообщении об исключении, подобное тому, что является невероятно тупой идеей. Мало того, что это бессмысленно, это вызывает серьезное сомнение в том, что еще вы нам не рассказываете. Для этого исключения нет пояснения к предоставленной информации, используйте другую машину. –

+0

Я новичок здесь. В моих поисках я видел, как другие это делали, поэтому я подумал, что, возможно, это показало то, что я не должен. Я возьму диверсию, чтобы рассказать о происхождении каждой части IID. –

+0

Идентификаторы интерфейса (GUID, который вы скрывали) не являются конфиденциальной информацией.Это просто уникальный номер, назначенный поставщику интерфейсу, так что никто другой не смутил бы его каким-либо другим интерфейсом от какого-либо другого поставщика. –

ответ

0

Мое предположение ... Проверьте свою библиотеку типов ClarityII на своей машине Dev, чтобы убедиться, что она зарегистрирована правильно. И, особенно, поскольку EXE EXE COM, проверьте, зарегистрирован ли интерфейс (CloudSensorII?) На вашем компьютере Dev. Поскольку EXE EXE, он будет сортировать. В прошлом у меня были проблемы с использованием интерфейсов Office, когда Office неправильно регистрировался на хост-машине и не регистрировал некоторые интерфейсы. В таких случаях иногда я получаю ошибки E_NOINTERFACE, IIRC.

Существует подраздел реестра HKEY_CLASSES_ROOT \ Interface

и есть один для 32-бит на 64-битных машин:

HKEY_CLASSES_ROOT \ Wow6432Node \ Interface

Проверка на машине, которая работает и сравните с тем, что нет.

+0

Отличное предложение - HKEY_CLASSES_ROOT \ Wow6432Node \ Интерфейс действительно отсутствовал на моей машине Dev. Переустановка пакета COM exe не исправила его - вручную добавив ключи, экспортировав их с рабочего ПК на Dev-компьютер, решена проблема. Моя программа работает отлично. Благодаря! –