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

Директива #import

25.07.2015, 17:56. Показов 4659. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru