Форум программистов, компьютерный форум, киберфорум
C/C++
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C/C++ Вызов функции из Dll (анализа IDA) https://www.cyberforum.ru/ c-cpp/ thread1632067.html
Здравствуйте! подскажите пожалуйста как можно получить указатель this класса что бы потом можно было вызывать функции из таблицы виртуальных функций?
C/C++ Создание модемного соединения для виртуального ком порта
Доброго времени суток! Нужна помощь или совет, по созданию модемного соединения к виртуальному порту. Данные между портами передаются отлично, но вот соединение к интернету не могу подключить. На этом всё останавливается. Номера *99***1# и *99#. Когда устанавливаю порт на реальный, установленный системой всё работает на ура. Но а как быть с виртуальным?
C/C++ Необходимо разобраться в коде https://www.cyberforum.ru/ c-cpp/ thread1607517.html
Функция вывода символа fputchar, разработанная в этом примере, позволяет вывести символ в последовательный порт. Функция принимает в качестве параметра одиночный символ. #include <stdio.h> #include <string.h> #include <REG52.H> void fputchar (unsigned char c1) { SBUF = c1; while (!TI); TI = 0; }
C/C++ Перехват функции для определенного потока Здравствуйте! Подскажите пожалуйста, возможно ли поставить перехват (по средствам Detours 2.1) функции для определенного потока ? https://www.cyberforum.ru/ c-cpp/ thread1607180.html
DLL hijacking или подмена DLL при открытии .docx C/C++
Набрел как-то на статью на хабре. Решил проверить на своем компе. Создал DLL следующего содержания: #include <windows.h> BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { switch (fdwReason) { case DLL_PROCESS_ATTACH: MessageBoxA(NULL, "Hi from DLL", "Info", MB_OK); break;
C/C++ COM: SAFEARRAY добавление элементов https://www.cyberforum.ru/ c-cpp/ thread1603053.html
День добрый. Перерыл множество ресурсов в поисках ответа на мой вопрос, но всё тщетно. Существует функция, в ней 4 типа данных: int, char, string, float. Все эти данные должны приводиться к одному общему, добавляться в массив SAFEARRAY и отправляться в dll на C#. Вопрос: каким образом добавлять новые значения в массив SAFEARRAY? cell AMX_NATIVE_CALL __callDotnetMethod(AMX* amx, cell*...
C/C++ Разработка программы, для управления моторизованным сканером магнитных карт https://www.cyberforum.ru/ c-cpp/ thread1601401.html
Добрый вечер. Не знаю правильно ли я выбрал ветку но попробую. Мне нужна помощь в написании, наверное программы, для управления моторизованным сканером магнитных карт. Требования не велики так как использование предполагается для одной только цели - проезд через шлагбаум. Вот ссылка на девайс: http://media.digikey.com/pdf/Data%20Sheets/Omron%20PDFs/3S4YR-MVF,MVS.pdf Заранее спасибо. Если...
Как получить WindowsForms (.NET) через ActiveX C/C++
Есть приложение, которое может использовать ActiveX элементы(контролы). Например можно использовать Windows Form 2.0 Функционал элементов Windows Form 2.0 довольно слабоват и хотелось бы использовать элементы которые есть в WindowsForms .NET (например DataGridView) Есть ли уже готовые решения для такой задачи? Возможно ли такое решение впринципе?
C/C++ Где в doc документе хранится его эскиз? https://www.cyberforum.ru/ c-cpp/ thread1592135.html
Нужно получить эскиз doc-документа. Из того, что смог найти в интернете узнал, что если при сохранении документа поставить галочку "Сохранить эскиз", то в документе сохраняется миниатюра. Но вот где именно она хранится найти не смог. Может кто подскажет?
C/C++ Экспорт одной строки в Excel из Access Здрасте, люди добрые помогите с экспортом одной строки в Excel из Access Надо чтобы при нажатии на строку экспортировало только её, а другие не трогала у вас на форуме нашёл кодик, а он все строчки которые есть кидает в excel, а надо одну которую выделил нажатием String fTPL = ExtractFilePath(Application->ExeName) + "template.xls"; Variant app, books, book, sheet, Rang, vCell; app =... https://www.cyberforum.ru/ c-cpp/ thread1589644.html
C/C++ Перехват выполнения скрипта
Недавно начал заниматься реализацией перехвата функций dll. (на примерах с MessageBox, в интернете их куча), по средствам Detours MS (v1.5) у меня получилось перехватить. Хочу сейчас перехватить выполнение скрипта с использованием jscript.dll или vbscript.dll. В импорте у них имеются 4 функции: 1. DllCanUnloadNow; 2. DllGetClassObject; 3. DllRegisterServer; 4. DllUnregisterServer; ...
C/C++ PDF-редактор, поддерживающий OLE https://www.cyberforum.ru/ c-cpp/ thread1576861.html
Подскажите, пожалуйста, PDF-редактор, поддерживающий OLE? Есть что-то кроме Adobe Acrobat?
Модератор
 Аватар для vxg
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,425
15.01.2016, 14:18 0

Как зарегистрировать в реестре сервер как Word.Application, но со своим CLSIDом? - C/C++ - Ответ 8623446

15.01.2016, 14:18. Показов 2741. Ответов 3
Метки (Все метки)

Ответ

Цитата Сообщение от notmeagain Посмотреть сообщение
зарегистрировать в реестре сервер как Word.Application, но со своим CLSIDом
если речь идет просто о том что бы прикинуться вородом и предоставлять пользователю COM имеющий те же самые методы и так же реагирующий на вызовы, но реально являющийся оберткой над каким-то другим реальным COM то собственно вопрос то в чем? если интерфейс одного объекта точно равен интерфейсу другого, то обертка пусть даже с промежуточной вставкой которая что то там будет делать пока вызов идет по мостику пишется достаточно просто. а вот если интерфейсы разные то ручками ручками все методы делаем. в любом случае вам придется реализовать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    //IDispatch
    virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(
        /* [out] */ UINT *pctinfo);
    virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(
        /* [in] */ UINT iTInfo,
        /* [in] */ LCID lcid,
        /* [out] */ ITypeInfo **ppTInfo);
    virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(
        /* [in] */ REFIID riid,
        /* [size_is][in] */ LPOLESTR *rgszNames,
        /* [in] */ UINT cNames,
        /* [in] */ LCID lcid,
        /* [size_is][out] */ DISPID *rgDispId);
    virtual HRESULT STDMETHODCALLTYPE Invoke(
        /* [in] */ DISPID dispIdMember,
        /* [in] */ REFIID riid,
        /* [in] */ LCID lcid,
        /* [in] */ WORD wFlags,
        /* [out][in] */ DISPPARAMS *pDispParams,
        /* [out] */ VARIANT *pVarResult,
        /* [out] */ EXCEPINFO *pExcepInfo,
        /* [out] */ UINT *puArgErr);
как вариант так (тут мы работаем сами с собой через IDispatch, но можно посылать такое и другим объектам я думаю)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
//------------------------------------------------------------------------------
HRESULT __stdcall CoMyObject::GetTypeInfoCount(
    /* [out] */ UINT *pctinfo)
{
    if (!pctinfo) return E_INVALIDARG;
    *pctinfo = 1;
    return S_OK;
}
//------------------------------------------------------------------------------
HRESULT __stdcall CoMyObject::GetTypeInfo(
    /* [in] */ UINT iTInfo,
    /* [in] */ LCID lcid,
    /* [out] */ ITypeInfo **ppTInfo)
{
    if (iTInfo) return E_INVALIDARG;
    if (!ppTInfo) return E_INVALIDARG;
    ptii->AddRef();
    *ppTInfo = ptii;
    return S_OK;
}
//------------------------------------------------------------------------------
HRESULT __stdcall CoMyObject::GetIDsOfNames(
    /* [in] */ REFIID riid,
    /* [size_is][in] */ LPOLESTR *rgszNames,
    /* [in] */ UINT cNames,
    /* [in] */ LCID lcid,
    /* [size_is][out] */ DISPID *rgDispId)
{
    return DispGetIDsOfNames
    (
        ptii,
        rgszNames,
        cNames,
        rgDispId
    );
}
//------------------------------------------------------------------------------
HRESULT __stdcall CoMyObject::Invoke(
    /* [in] */ DISPID dispIdMember,
    /* [in] */ REFIID riid,
    /* [in] */ LCID lcid,
    /* [in] */ WORD wFlags,
    /* [out][in] */ DISPPARAMS *pDispParams,
    /* [out] */ VARIANT *pVarResult,
    /* [out] */ EXCEPINFO *pExcepInfo,
    /* [out] */ UINT *puArgErr)
{
    return DispInvoke
    (
        static_cast<IDispatch *>(this), //по идее вот тут лежит объект который принимает конкретный вызов метода через IDispatch
        ptii,
        dispIdMember,
        wFlags,
        pDispParams,
        pVarResult,
        pExcepInfo,
        puArgErr
    );
}
естественно ваш объект должен уметь возвращать IDispatch при запросе IDispatch интерфейса через QueryInterface и держать в кармане библиотеку типов для имитируемого интерфейса
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//------------------------------------------------------------------------------
CoMyObject::CoMyObject(void):
    ptii(0)
{
    server_data_inc_objs_count();
 
    ITypeLib *ptli;
    if
    (
        SUCCEEDED
        (
            LoadRegTypeLib
            (
                TypeLibID,
                TypeLibVersionMajor,
                TypeLibVersionMinor,
                MAKELCID
                (
                    MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),
                    SORT_DEFAULT
                ),
                &ptli
            )
        )
    )
    {
        ptli->GetTypeInfoOfGuid(IID_IMyObject, &ptii);
        ptli->Release();
    }
}
//------------------------------------------------------------------------------
CoMyObject::~CoMyObject(void)
{
    server_data_dec_objs_count();
 
    if (ptii) ptii->Release();
}


Вернуться к обсуждению:
Как зарегистрировать в реестре сервер как Word.Application, но со своим CLSIDом? C/C++
0
Заказать работу у эксперта
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.01.2016, 14:18
Готовые ответы и решения:

Установка компонентов - как зарегистрировать компоненты вкладки activeX в реестре
Подскажите пожалуйста, как зарегистрировать компоненты вкладки activeX в реестре? Это необходимо,...

Как зарегистрировать новый локальный сервер?
Подскажитн как зарегистрировать новый локальный сервер. в доступных серверах ничего нет.

Word.application: Как Получить Индекс Таблицы?
Добрый день. Делаю небольшой вордовый отчет по шаблону, который собирает данные из коллекции...

Word - как заставить событие у Application работать всегда?
Помогите решить такую проблему, бьюсь уже далеко не первый день. Нужно, чтобы при закрытии: 1)...

3
15.01.2016, 14:18
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.01.2016, 14:18
Помогаю со студенческими работами здесь

работа с объектом класса Internetexplorer.application как с Ole-сервер
Привет всем. Подскажите пожалуйста несколько примеров программной работы с OLE-объектом...

0
Новые блоги и статьи
Преобразование полей (элементов управления содержимым) в обычный текст
РоΜа 23.01.2025
Возникла необходимость преобразовать поля в текст (те, что на вкладке разработчик добавляются) . Помучившись родил следующее: Sub ПоляВТекст() Преобразует все поля в текст (даты, текст,. . .
Как проверить существование директории в скрипте Bash
bt_guru 23.01.2025
При разработке скриптов Bash одной из ключевых задач является корректная работа с файловой системой, где особое место занимает проверка существования директорий. Эта операция становится критически. . .
Как работают срезы (slice) в Python
bytestream 23.01.2025
Python предоставляет разработчикам мощный и гибкий инструмент для работы с последовательностями данных - срезы (slices). Эта функциональность позволяет извлекать, модифицировать и управлять. . .
Как удалить подмодуль (submodule) в Git
bytestream 23.01.2025
При работе с крупными проектами в системе контроля версий Git разработчики часто сталкиваются с необходимостью управления зависимостями и внешними компонентами. Подмодули (submodules) представляют. . .
В чем разница между @staticmethod и @classmethod в Python. Декораторы методов
bytestream 23.01.2025
В Python декораторы методов представляют собой мощный инструмент, позволяющий модифицировать поведение функций и методов без изменения их исходного кода. Эта возможность является одной из. . .
Как преобразовать InputStream в String в Java
bytestream 23.01.2025
В мире Java-разработки работа с потоками данных является одной из ключевых операций при создании современных приложений. InputStream, как фундаментальный класс для обработки входных потоков данных,. . .
Как обновить форк (ответвление) репозитория в Git
bytestream 23.01.2025
Одним из наиболее мощных инструментов Git для организации совместной работы является механизм форкинга репозиториев, который позволяет создавать независимые копии проектов для дальнейшей разработки. . . .
Как работает async/await в C#. Асинхронное программировани­е в .NET
bytestream 23.01.2025
Введение в асинхронное программирование Асинхронное программирование представляет собой важнейшую концепцию современной разработки программного обеспечения, особенно в контексте создания. . .
КуМир: полное руководство
bytestream 23.01.2025
Введение в КуМир: история создания и назначение КуМир (Комплект Учебных МИров) представляет собой образовательную среду программирования, которая была создана для обучения основам алгоритмизации и. . .
Что такое OLAP. Где и как использовать многомерный анализ данных
bytestream 23.01.2025
Введение в OLAP-технологии В современном мире бизнес-аналитика и обработка больших массивов данных играют ключевую роль в принятии стратегических решений. Организации накапливают огромные объемы. . .
MongoDB: что это, для чего нужна и как использовать
bytestream 23.01.2025
Введение в MongoDB: современная документоориентированная СУБД В современном мире разработки программного обеспечения выбор правильной системы управления базами данных является критически важным. . .
Как использовать закрытый ключ шифрования в Git. Шифрование в Git
bytestream 23.01.2025
Установка и настройка закрытых ключей в Git предоставляет дополнительный уровень безопасности для работы с репозиториями. Для начала необходимо создать пару ключей, обычно это осуществляется с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru