Member 14824395 Ответов: 1

Получение исключения system.runtime.interopservices.comexception при использовании 'tdconnection qctd = new tdconnection()'. Любая помощь в исправлении этого будет оценена по достоинству.


Получение System.Runtime.InteropServices.COMException при использовании
'TDConnection qctd = new TDConnection()'.
Любая помощь в исправлении этого будет оценена по достоинству.

Что я уже пробовал:

Получение System.Runtime.InteropServices.COMException при использовании
'TDConnection qctd = new TDConnection()'.
Любая помощь в исправлении этого будет оценена по достоинству.

Richard MacCutchan

Какое исключение?

Member 14824395

Привет,

Я получаю
Система.Время Выполнения.InteropServices.Исключение comexception:'получение фабрики классов COM для
компонент с CLSID {C5CBD7B2-490C-45F5-8C40-B8C3D108E6D7} не удалось выполнить из-за следующей ошибки:80040154 класс не зарегистрирован (исключение из HRESULT:0x80040154(REGDB_E_CLASSNOTREG)}

Спасибо.
Санел.

Richard MacCutchan

Вам нужно проверить, что вы правильно зарегистрировали компонент.

Member 14824395

Как проверить, что он зарегистрирован правильно?

Richard MacCutchan

Я предполагаю, что вы установили этот продукт, поэтому вы должны быть в состоянии проверить, что он был установлен правильно. В противном случае посмотрите в реестре на HKEY_CLASSES_ROOT\CLSID узел для этого GUID.

MadMyche

Соответствует ли COM dll "разрядности" вашего решения (например, 32 бит)?

Member 14824395

Привет,

COM dll-это 32-битная версия, а мое решение-64-битное. Не могли бы вы, пожалуйста, дать мне знать, есть ли в этом проблема? Если да,пожалуйста, дайте мне знать, как это исправить.

Спасибо,
Санел.

1 Ответов

Рейтинг:
4

MadMyche

Комментарий:
Привет,
COM dll-это 32-битная версия, а мое решение-64-битное. Не могли бы вы, пожалуйста, дать мне знать, есть ли в этом проблема? Если да,пожалуйста, дайте мне знать, как это исправить.
Самый простой способ сделать это-сделать ваше приложение 32-битным.
Альтернативой если бы у вас был доступ к исходному коду была бы перекомпиляция в 64 битную версию
Комментарий:
Привет,
Я получаю
Система.Время Выполнения.InteropServices.Исключение comexception:'получение фабрики классов COM для
компонент с CLSID {C5CBD7B2-490C-45F5-8C40-B8C3D108E6D7} не удалось выполнить из-за следующей ошибки:80040154 класс не зарегистрирован (исключение из HRESULT:0x80040154(REGDB_E_CLASSNOTREG)}
Регистрация COM-компонентов в основном означает, что ссылки добавляются в список внутри Windows Реестр.

Существуют отдельные списки для 32 - битных и 64-битных COM-объектов. Когда вы устанавливаете и регистрируете 32-битную DLL, она попадает в 32-битный список.
Когда 64 - разрядное приложение ищет COM-объекты, оно будет искать их в 64-разрядном списке.
Следовательно... ошибка.
Как уже говорилось ранее, лучший выбор-либо использовать 64-разрядную версию DLL, либо сделать ваше приложение 32-разрядным.

Есть несколько хаков по копированию записей реестра... что может быть хорошо локально но может быть кошмаром если это приложение должно быть развернуто на нескольких машинах


Member 14824395

Спасибо за объяснение. Не могли бы вы дать мне знать, как сделать мое приложение 32-битным?

MadMyche

Это параметр среды IDE, который используется для разработки приложения.
MS Docs => Как настроить проекты для целевых платформ[^]

Member 14824395

Привет,

Я действительно сделал свое приложение 32-битным и побежал. Теперь я получаю ниже ошибку в журнале. Не могли бы вы мне помочь?

Значение Имени
Подключенная оценка функции требует запуска всех потоков.
TestSetFactory оценка функции требует запуска всех потоков.

Спасибо.

Member 14824395

Привет,

Я действительно сделал свое приложение 32-битным и побежал. Теперь я получаю ниже ошибку в журнале. Не могли бы вы мне помочь?

Значение Имени
Подключенная оценка функции требует запуска всех потоков.
TestSetFactory оценка функции требует запуска всех потоков.

Спасибо.

Member 14824395

Привет,

Спасибо Вам за Вашу поддержку в решении моих проблем. Теперь все проблемы исправлены, кроме одной.

При выполнении оператора 'filter["CY_FOLDER_ID"] = "\"" +testFoldername + "\"";' он выдает мне ошибку
'Root\Path' не является допустимым целочисленным значением.
Не могли бы вы дать мне знать, как это исправить?

Код:
-----

если (qctd.Связанный)
{
TestSetFactory testSetFactory = (TestSetFactory)qctd.TestSetFactory;
TDFilter filter = (TDFilter)testSetFactory.Фильтр;
string[] testCasesFolderNames = testSetFolderPath.Split(';');
по каждому элементу (строка testFoldername в testCasesFolderNames)
{
if (testFoldername!=null)
{
фильтр["CY_FOLDER_ID"] = "\"" +testFoldername + "\"";

MadMyche

Это выглядит так filter["CY_FOLDER_ID"] это целое число, представляющее идентификатор папки, а не путь к ней.