2013-06-07 3 views
0

У меня есть приложение C#, которое должно использовать COM-класс, написанный на VB6. Приложение должно использовать динамическое связывание, поскольку оно должно иметь возможность использовать разные версии кода на основе той версии (то есть, какой DLL), которую выбрал пользователь. Способ, которым программа поддерживает это, - сначала обнаружить все версии в реестре, а затем позволить пользователю выбрать.800a0035 Ошибка с Net-COM Interop

Код работает на моей машине и на моем рецензенте, но код, который ссылается на класс COM, терпит крах для человека, выполняющего гарантию качества (QA).

Я положил коробку сообщение в коде, чтобы отобразить сообщение об ошибке, и это то, что QAer получает: enter image description here

Я нахожу часть «FILENOTFOUND» особенно сбивает с толку, потому что я знаю, что DLL присутствует на ней машина. Фактически, она лично зарегистрировала DLL на своей машине, используя утилиту правой кнопки мыши для регистрации в DLL; и это та самая полезность, которую я использовал.

Затем я провел какое-то дальнейшее расследование, чтобы найти то, что разрушала линия. Вот код, который создает экземпляр класса COM с проблемной линии окликнул :

//Constructor for HtmlRtfConvProxy 
public HtmlRtfConvProxy(String convWrapperProj) { 
    convUtilType = Type.GetTypeFromProgID(convWrapperProj + "." + WRAPPER_CLASS_NAME); 
    if(convUtilType == null) { 
     throw new ArgumentException("Unable to find COM class"); 
    } 
    //The following line is crashing for the person doing QA 
    vbTargetObject = Activator.CreateInstance(convUtilType); 
    if(vbTargetObject == null) { 
     throw new ExternalException("Unable to instantiate COM class"); 
    } 
} 

То, что я нашел еще более запутанной была какая линия была врезаться. Это была не та строка, где я пытался получить Type для объекта, но где я пытался использовать экземпляр объекта. Я бы подумал, что если DLL не может быть найдена, то линия, в которой я получаю Type, потерпит крах.

Я подозреваю, что это имеет какое-то отношение к разрешениям, но мои исследования по этим линиям были бесплодны. Похоже, что у QAer есть необходимые разрешения.

Примечание: Я не гуру, когда дело доходит до разрешения файлов Windows.

+0

Есть ли у вашего лица QA 64-разрядная ОС, в то время как у вас 32-разрядная ОС или наоборот? –

+0

@DarkFalcon Оба человека QA, и у меня 64-разрядные машины Windows 7. – Sildoreth

+2

Возможно, стоит запустить [Process Monitor] (http://technet.microsoft.com/en-gb/sysinternals/bb896645): он должен показать вам путь, который он пытается открыть, и код ошибки ОС для этого (например, файл не найден, путь не найден, разрешения и т. д.) – Rup

ответ

0

Проблема заключалась в том, что некоторые из библиотек DLL, которые были , на который ссылается целевой DLL не удалось найти на компьютерах, испытывающих эту проблему.

Смежные вопросы