3 / 2 / 2
Регистрация: 21.03.2017
Сообщений: 290
|
|||||||||||
1 | |||||||||||
Почему не создаётся итерфейс19.03.2018, 02:19. Показов 1604. Ответов 3
Метки нет (Все метки)
Возникла необходимость в приложение, написанное на С++ в Visual Studio 2008, ввести шифрование AES256.
Зная, что это уже реализовано во framework'е .Net решил использовать это в своём приложении. Для начала решил написать небольшой прототип, чтобы научиться передавать данные между разными технологиями. Написал библиотеку на C#: интерфейс, собственно класс - всё как в примерах, скомпилировал, подписал, добавил в проект. Вот код этой части. C++.
Но при отладке вижу, что в строке pAes256DecoderPtr.CreateInstance(Aes256Decoder::CLSID_CAes256Decoder) указатель pAes256DecoderPtr равен NULL, и, как следствие, метод SayHello не вызывается. Код скопировал с примера с точностью до имён переменных. Что не так? Почему не работает? Как-то нужно инициализировать указатель pAes256DecoderPtr - а как? В примере нет ничего, а сам я в этой области не силён. Может, кто знает, что не так делаю?
0
|
19.03.2018, 02:19 | |
Ответы с готовыми решениями:
3
Почему не создается нормальная матрица Почему не создается дочернее окно? Почему не создается второй объект класса? Почему не создается специализация шаблона функции |
2708 / 862 / 326
Регистрация: 10.02.2018
Сообщений: 2,044
|
|
19.03.2018, 09:37 | 2 |
Это делает функция CreateInstance. Кроме того, эта функция возвращает код ошибки. Если что-то не работает, то первым делом нужно посмотреть значение этого кода. Возможно, что clsid не был должным образом зарегистрирован в реестре.
0
|
3 / 2 / 2
Регистрация: 21.03.2017
Сообщений: 290
|
|
19.03.2018, 10:32 [ТС] | 3 |
Действительно, возвращает ошибку -2147221164 (0x80040154) "Класс не зарегистрирован..."
А почему он мог не зарегистрироваться? И как его зарегистрировать "должным образом". Повторюсь, всё делал, как в примерах предложено. Добавлено через 2 минуты Регистрирую вот так: C:\Windows\Microsoft.NET\Framework64\v4.0.30319>RegAsm D:\Repositories\da_winclient\Aes256Decoder\Aes256Decoder\Aes256Decoder\bin\Debug \netstandard1.4\Aes256Decoder.dll /tlb:Aes256Decoder.tlb /codebase Microsoft .NET Framework Assembly Registration Utility version 4.7.2556.0 for Microsoft .NET Framework version 4.7.2556.0 Copyright (C) Microsoft Corporation. All rights reserved. Types registered successfully Assembly exported to 'D:\Repositories\da_winclient\Aes256Decoder\Aes256Decoder\Aes256Decoder\bin\Debu g\netstandard1.4\Aes256Decoder.tlb', and the type library was registered successfully Вроде бы, пишет, что всё зарегистрировано. Нет?
0
|
2708 / 862 / 326
Регистрация: 10.02.2018
Сообщений: 2,044
|
|
19.03.2018, 12:14 | 4 |
Не знаю)
Моё знакомство с COM специфично, я не делал библиотек типов и не сопрягал компоненты созданные на разных языках программирования. То, что делал я регистрировалось утилитой regsvr32. Общий смысл регистрации в том, что бы иная программа могла подключить нужную компоненту зная только её cslid и имея заголовочный файл с интерфейсом. Информация о имени DLL-файла и пути до него помещается в определённое место виндового реестра. CreateInstance ищет в реестре секцию с именем аналогичным текстовому представлению clsid. Если находит, то читает из неё имя DLL, загружает её в процесс LoadLibrary, достаёт из DLL указатель на функцию создания аналогичную по синтаксису CreateInstance и вызывает её с передачей ей необходимых параметров. Функция создаёт объект класса отнаследованного от абстрактного интерфейса и возвращает его вызвавшей программе. Я бы проверил пару вещей для начала. (1) Битность компоненты и программы должны совпадать. (2) Запустил бы regedit или ещё что-то для просмотра реестра и поискал, что там записалось для вашего clsid. Хотя у RegAsm есть опция "/regfile", можно запустить с ней и посмотреть что и куда оно складывает в реестре.
0
|
19.03.2018, 12:14 | |
19.03.2018, 12:14 | |
Помогаю со студенческими работами здесь
4
Почему БЕЗОШИБОЧНО создаётся файл, а его не видно? Не создаётся объект string на ровном месте! Почему? Файловый ввод-вывод. Почему не создается/открывается файл? Почему поток в создаётся в зависимости от функции, которая в нём вызывается? Почему два раза создаётся объект с ОДНИМ И ТЕМ ЖЕ ИМЕНЕМ? Почему при инициализации строки, сначала создаётся пустой объект? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |