|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|||||||||||||||||||||
Создание COM DLL: ошибка в приведении типов10.07.2015, 18:46. Показов 2055. Ответов 6
Метки нет (Все метки)
Здорова!
Читаю про COM, в книге нашел пример Пример EX24B - обычная MFC DLL, содержащая настоящую COM-версию класса CSpaceship. Вот код Файл INTERFACE.h: Кликните здесь для просмотра всего текста
Файл SPACESHIP.h Кликните здесь для просмотра всего текста
Файл SPACESHIP.cpp Кликните здесь для просмотра всего текста
И когда компилирую получаю ошибки: Кликните здесь для просмотра всего текста
SPACESHIP.cpp 1>d:\visual studio 2010\projects\mfcdllcom\mfcdllcom\spaces hip.cpp(80): error C2664: CCmdTarget::ExternalQueryInterface: невозможно преобразовать параметр 1 из "const IID" в "const void *" 1> Для выполнения данного преобразования нет доступного оператора преобразования, определенного пользователем, или вызов оператора невозможен 1>d:\visual studio 2010\projects\mfcdllcom\mfcdllcom\spaces hip.cpp(119): error C2664: CCmdTarget::ExternalQueryInterface: невозможно преобразовать параметр 1 из "const IID" в "const void *" 1> Для выполнения данного преобразования нет доступного оператора преобразования, определенного пользователем, или вызов оператора невозможен 1>d:\visual studio 2010\projects\mfcdllcom\mfcdllcom\spaces hip.cpp(136): error C2440: приведение типов: невозможно преобразовать "CString" в "const char *" 1> Для выполнения данного преобразования нет доступного оператора преобразования, определенного пользователем, или вызов оператора невозможен 1> 1>СБОЙ построения. Как можно перевести const IID в const void* ??? Ошибка в этом коде:
Добавлено через 4 часа 42 минуты Ну так что? Кто этот пример разбирал? В книге там этот пример для VS6, а я набрал его в VS10, мб. из за этого ошибки вылазят?
0
|
|||||||||||||||||||||
| 10.07.2015, 18:46 | |
|
Ответы с готовыми решениями:
6
Ну жна помощь в приведении типов |
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|||||||||||
| 13.07.2015, 20:27 [ТС] | |||||||||||
|
В общем исправил эту ошибку, там нужно указатель передавать отак:
1>ClCompile: 1> Для всех выходных данных обновления не требуется. 1> SPACESHIP.cpp 1>d:\visual studio 2010\projects\mfcdllcom\mfcdllcom\spaces hip.cpp(136): error C2440: приведение типов: невозможно преобразовать "CString" в "const char *" 1> Для выполнения данного преобразования нет доступного оператора преобразования, определенного пользователем, или вызов оператора невозможен 1> 1>СБОЙ построения. ошибка в этой функции:
Как эту ошибку обойти? Я пока закоментировал строку с ошибкой и так скомпелировал и получил COM DLL, а теперь что с этим COM DLL делать? ![]() Добавлено через 1 минуту Создал объект DLL COM теперь нужно его как то попытаться использовать но как? )))) Добавлено через 41 минуту Я создал тестовый пример и сейчас у меня пишет ошибки: Не найден Program ID -- ошибка = 800401f3 То есть он не может найти в реестре найти GUID моей COM DLL, как добавить в реестр свою COM??? Добавлено через 6 минут Как добавить в реестр информацию о MFC COM DLL? Добавлено через 20 минут Так что никто не знает как его зарегистрировать? Я добавил dll в windows/system32 и вызвал из меню пуск -> выполнить regsvr32 MfcDllCom.dll , и у меня выводится ошибка: Добавлено через 1 минуту в книге написано что для того чтобы зарегистрировать dll нужно использовать использовать специальную утилиту с диска под названием REGCOMP где ее брать хз.
0
|
|||||||||||
|
694 / 304 / 99
Регистрация: 04.07.2014
Сообщений: 851
|
|
| 13.07.2015, 20:50 | |
|
Зачем тебе com? Брось каку.
0
|
|
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
||
| 14.07.2015, 08:57 [ТС] | ||
|
Добавлено через 3 минуты Нашел утилиту RegComp и все рамно она не регистрирует, пишет ошибку: failed to find dllregisterserver function что делать? что это означает? Добавлено через 9 минут Ну так что это значает, не может найти dllRegisterServer, а что это такое? Добавлено через 10 часов 0 минут так что никто не знает как зарегистрировать COM компонент? Добавлено через 30 минут и что делать? как исправлять? Добавлено через 37 секунд Я смотрел что эта ошибка означает, это типо у меня неправильный dll. А что делать? как его исправлять?
0
|
||
|
694 / 304 / 99
Регистрация: 04.07.2014
Сообщений: 851
|
|
| 14.07.2015, 10:05 | |
|
Ну а почитать внимательно про процесс создания com-объектов кто будет? Надо не только написать класс. Но и описать интерфейс, сгенерировать прослойку и откомпилить уже все вместе. Ты для начала подбери побольше литературы и найди простой пример.
З.Ы.: если ты сейчас не знаешь зачем тебе com объекты и с чем их едят. Начни с чего-то более простого. Прочитай про REST, ZeroMQ и Т.п.
0
|
|
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
||||
| 14.07.2015, 10:16 [ТС] | ||||
![]() Кстати только что "методом тыка" заработало, зарегистрировал dll и все заработало, проблема была в самой dll, там ее нужно создавать как dll, а я как попало создал ![]() Хороше бы еще рассмотреть пример с COM EXE, с dll разобрались, а как создать теперь COM exe - так называемый внешний компонент. dll это как бы внутренний компонент, а exe внешний. Да тут еще где на диске должны хранится COM компоненты? От например COM DLL как я понял ее как обычную dll в папке с программой не получится сохранять, ее же ведь нужно регистрировать? Значит что получается ее нужно в windows/system32 закидывать, регистрировать и потом использовать? Вообще то я не пробовал ее запустить из папки программы, но что то мне кажется что из папки программы оно не будет работать, от если я удалю зарегистрированую COM dll из system32 и скопирую ее в папку с программой, то она ж не найдется правильно? Щас проверю ![]() Добавлено через 57 секунд ![]() Добавлено через 8 минут
0
|
||||
|
Модератор
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,450
|
||
| 14.07.2015, 10:51 | ||
|
DLL в котором живет COM-объект так же загружает система. но причина этой загрузки не запуск EXE, а создание объекта - кто-то где-то в системе создает объект определенного класса, система ищет в реестре запись в которой написано где лежит DLL в котором живет этот объект (запись создается при регистрации), загружает ее и получает от нее ссылку на объект. если вы утащили DLL, то система конечно же не найдет ее. напрасно вы игнорируете ветку форума посвященную COM - да, в ветке для начинающих больше людей, но и вопрос ваш утонет в потоке проблем-однодневок. больные вашей проблемой люди заходят в соответствующую ветку, а другие вам вряд ли ответят. пример COM (без обложек) https://www.cyberforum.ru/com-... ost3538077
1
|
||
| 14.07.2015, 10:51 | |
|
Помогаю со студенческими работами здесь
7
FormatException не обработано при приведении типов
Нахождение ошибки в наследовании и приведении типов
Куда деваются байты при приведении типов? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|