Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041

Директива #import

25.07.2015, 17:56. Показов 4624. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здорова!
Подключаю tlb файл
C++
1
2
3
#include <afxdisp.h>        // классы автоматизации MFC
#import "OLE_EXE.tlb" rename_namespace("BankDriv")
using namespace BankDriv;
что означает rename_namespace? это что пространство имен создается? Вообще import директива что делает?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.07.2015, 17:56
Ответы с готовыми решениями:

Директива using
Задался вопросом по поводу директива using. #include &lt;iostream&gt; namespace x{int a = 100; int b = 10;} namespace y{int a = 10; int...

Директива include
Допустим я создаю файл header.h:int N();, а так же файл header.cpp:#include &quot;header.h&quot; int N() { return 2; } Каким...

Директива #ifndef
Здравствуйте! Есть такой код: #define lastVersion #ifndef lastVersion #include &lt;version1.h&gt; int main() { ClassA A; ...

5
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
25.07.2015, 17:59
Цитата Сообщение от ninja2 Посмотреть сообщение
Вообще import директива что делает?
В языке C++ нет такой директивы.
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
25.07.2015, 22:26  [ТС]
Еще от непонятно как ищется компонет, загружает его от такой код:
C++
1
2
3
4
    if(m_bank.CreateInstance(__uuidof(Bank)) != S_OK) {
        AfxMessageBox(L"Bank component not found");
        return;
    }
m_bank имеет тип IBankPtr m_bank;
и что означает эта запись (__uuidof(Bank), откуда они взяли Bank????

Добавлено через 1 минуту
У меня пишет ошибку что Bank component not found, что то делаю не так. у меня вообще progID компонента OLE_EXE.Bank. А что это за фигня __uuidof(Bank) я не пойму

Добавлено через 11 минут
Ладно я понял __uuidof(Bank) это идентификатор GUID который находится в файле idl, там у него название Bank, но я не пойму почему у меня не создается m_bank? Почему оно не находит в реестре, я только проверил, там есть GUID и он такой же самый как в idl файле, значит должно находится. Походу через #import ищем компонент через GUID, а не через progID. Или хз. ниче не ясно

Добавлено через 23 минуты
Ну так в чем проблема нипонятно, я уже явно задаю CLSID именно компонента, от в коде явно прописал тот который находится у меня в реестре и в idl файле он совпадает и в самом tlh файле совпадает, можно было бы явно вызов не делать. Но даже явно не находит, почему? Вот код явного вызова:
C++
1
2
3
4
5
struct __declspec(uuid("91ed4e19-c337-463c-b93e-ff83ffb14fa2"))kkk;
    if(m_bank.CreateInstance(__uuidof(kkk)) != S_OK) {
        AfxMessageBox(L"Bank component not found");
        return;
    }
В чем может быть проблема?

Добавлено через 21 минуту
попробовал подключить другой компонент, все нормально подключился. Это что значит? Значит проблема в самой инициализации. Что то здесь не то в этой функции.
C++
1
2
3
4
5
struct __declspec(uuid("91ed4e19-c337-463c-b93e-ff83ffb14fa2"))kkk;
    if(m_bank.CreateInstance(__uuidof(kkk)) != S_OK) {
        AfxMessageBox(L"Bank component not found");
        return;
    }
Мне что то кажется возможно или GUID не правильный или хз. что
а возможно сам m_bank не правильных хз.

Добавлено через 29 минут
Заходил через отладчик в функцию CreateInstance, там объект по идентификатору создается функция CoCreateInstance срабатывает, Вылитает на отетой строчке, оно не вылитает, а получается faild результат
C++
1
hr = pIUnknown->QueryInterface(GetIID(), reinterpret_cast<void**>(&m_pInterface));
Что здесь происходит? Здесь мы через указатель yf IUnknown получаем указатель на интерфейс GetIID(), тот интерфейс который вернет функция GetIID, похоже нужно зайти в эту функцию и посмотреть какой идентификатор она вернет, возможно я изменил идентификатор, хотя я смотрел идентификаторы одинаковые что в исходнике что в idl файле, значит должено все сгенерироваться правильно. Либо попытаться заново сгенерировать GUID для интерфейса и попробовать загрузить хз. что делать.

Добавлено через 10 минут
почему то в функцию QueryInterface не заходит, а вылетает сразу, я зашел туда при нормальном подгрузе модуля, а когда с вылетом туда не заходит, оно сразу заходит в функцию GetIID() и потом переходит дальше

Добавлено через 3 минуты
А что означает такой синтаксис определения функции?
C++
1
2
3
4
static const IID& GetIID() throw()
    { 
        return ThisIIID::GetIID(); 
    }
что означает throw()? IID это тип возвращаемого параметра, должно вернутся CLSID. Первый раз такой синтаксис вижу.

Добавлено через 2 минуты
От еще одно определение в которое входим
C++
1
2
3
4
static const IID& GetIID() throw()
    {
        return *_IID;
    }
Тут уже возвращается *_IID

Добавлено через 8 минут
Короче оно даже в функцию QueryInterface не заходит, вылетает на заходе к ней.

Добавлено через 20 минут
Для двое компонентов подгружаются нормально. Один этот нет. похоже я tlb файл сгенерировал неправильно, я помню несколько раз функции создавал потом удалял их и вручную удалял из idl файла и наверно там что то напортачил и неправильный tlb файл сгенерировался хз. что за фигня.

Добавлено через 2 часа 1 минуту
В общем пробовал раз 5 создавать новые проекты и ничего не получается. Проблема в самом интерфейсе, сам интерфейс IBank, его нету в реестре, от те два компонента что нормально работают там есть их интерфейсы в Ole Viewer, а этого нету. Как добавить интерфейс в реестр windows?????? проблема видимо в этом.

Добавлено через 2 минуты
У этих что норм работают уних type lib добавляется к самим файлам dll и exe.
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
27.07.2015, 09:50  [ТС]
По новому сделал приложение и у меня добавился интерфейс в реестр, только не ясно какие функции его добавили. Наверно нужно смотреть это в InitInstance приложения.
0
Заблокирован
27.07.2015, 11:57
Цитата Сообщение от ninja2 Посмотреть сообщение
что означает rename_namespace?
Если у тебя всё в компоненте в пространстве имён, его можно переименовать. Лично я, когда ещё программировал в VisualStudio, обычно использовал вместо этого no_namespace, что б не было лишнего гемороя (если конечно у тебя имена не пересекутся)
https://msdn.microsoft.com/ru-... 265fx.aspx

Цитата Сообщение от ninja2 Посмотреть сообщение
Вообще import директива что делает?
Да на MSDN есть же всё https://msdn.microsoft.com/ru-... zzkb6.aspx

Вообще этой штукой (импортом) лично я подключал так сказать "статический" DLL-ки в студии.
Я уже точно не помню, но вроде после компиляции с директивой импорта и указанием ей dll-ки, в выходной папке появляются файлы типа TLH и TLI, это как бы хедер и сорц, которые были сгенерены их этой dll-ки. Или TLB генерится, не помню уже. Короче, то что сгенерилось, ты потом этим же импортом можешь смело подключать к проекту и эта как бы будет подключение динамической библиотеки на этапе сборки.
1
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
27.07.2015, 12:33  [ТС]
Цитата Сообщение от Butt-Head Посмотреть сообщение
в выходной папке появляются файлы типа TLH и TLI
Ну да, в той папке где мусор собирается. TLH определение smartPtr, а в TLI inline функции
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.07.2015, 12:33
Помогаю со студенческими работами здесь

Директива препроцессора #if
Вобще при коспиляции файла взятого с офф сайта микрософт endian.h Получаю вот такие ошибки 17|error: operator '==' has no left operand ...

Не работает директива
Здравствуйте. Занимаюсь по книге Prata. Использую code::bloocks 17.12... Начал читать про шаблонный класс Array. Странно , но при...

Директива #error
Как ей правильно пользоваться? Надо что бы вывело сообщение об ошибке если индекс будет больше или равен 10 int main() { ...

Директива #include
Всем Привет! Помогите мне разобраться пожалуйста! Я не могу понять как работает директива #include. Я не понимаю где находятся файлы....

директива extern
Никак н могу понять как решить проблму с директивой extern. Я подключил к проекту файл libext.h и попытался скомпилировать программу. И...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru