работаем с Component Object Model, или проще, с COM объектами

Предыдущая тема Следующая тема Перейти вниз

работаем с Component Object Model, или проще, с COM объектами

Сообщение  electrik в Сб Сен 06, 2008 4:15 am

привет. моя цель, научиться работать с COM объектами напрямую. пока я это делаю через библиотеку входящую в состав FreeBasic- "disphelper". конечно это все очень удобно, но как правило, в библиотеках есть функции которые зачастую не нужны. соответственно, бинарный файл разбухает, а я фанат эффективных и маленьких прог. желающим помочь, буду благодарен, и чтоб вам было интересней, представляю маленькую програмку, написанную с помощью библиотеки disphelper. цель, перевести эту програмку, на нормальный COM интерфейс. программа представляет из себя маленькую говорилку, которая использует SpeechApi 5. SpeechApi- \это интерфейс, построенный Microsoft, для работы с речевыми технологиями. для этого надо скачать голосовые движки типа:
acapela elan tts speechcube 5.1, Acapela Alyona, NextUp Nuance Scansoft TTS Russian F Katerina.
конечноже можно качнуть какой-нибудь один. в инете эти файлы могут называться так:
acapela-elan-tts-speechcube-5.1-rus-nicolai_mme255_.msi
NextUp-Nuance-Scansoft-TTS-Russian-F-Katerina-ver2-Fixed.exe
katerinaa1.exe
если есть движки от Sakrament- тоже можно. если не найдете, ну чтож, придется кидать на файловый обменник. а теперь код программы:

#define unicode
#include once "windows.bi"
#include "disphelper/disphelper.bi"

static SHARED as IDispatch ptr tts = NULL 'указатель на интерфейс

dhInitialize( TRUE ) 'инициализируем disphelper
dhToggleExceptions( TRUE )

'создаем объект "Sapi.SpVoice", далее используем указатель tts
IF FAILED(dhCreateObject ("Sapi.SpVoice", NULL, @tts)) THEN
end 'если не создали то завершаем прогу
end if
dhPutRef(tts, ".Voice = %o", 0) 'выбираем голосовой движок
dhCallMethod(tts, ".Speak(%s)", "добро пожаловать на русскоязычный сайт FreeBasic") 'говорим строчку
SAFE_RELEASE( tts) 'выгружаем интерфейс ттс
dhUninitialize( TRUE ) 'унинициализируем disphelper
end

еще раз, заранее всем спасибо!

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 37
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: работаем с Component Object Model, или проще, с COM объектами

Сообщение  tux в Сб Сен 06, 2008 1:43 pm

Прикольно, не знал про ету библиотеку, когдато давно на оф форуме обсуждались темы ActiveX, но решения им тогда не было. Вообще я думаю в не так просто ето сделать напрямую, поетому и сделали отдельную библиотеку, а судя по тому, что ета технология чисто микрософтовская, то прямой поддержки я думаю она не получит.
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 29
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

работаем с Component Object Model, или проще, с COM объектами

Сообщение  electrik в Сб Сен 06, 2008 6:29 pm

привет tux. дело в том, что с помощью winapi, можно сделать всё. приведу не полный пример, предположительно это выглядит так:

#include "windows.bi"
#include "objbase.bi"
const CLSCTX_INPROC_SERVER = 0x1

enum ITaskBarList,\
QueryInterface
AddRef
Release
HrInit
AddTab
DeleteTab
ActivateTab
SetActiveAlt
end enum

dim CLSID_TaskbarList as guid = "56FDF344-FD6D-11D0-958A-006097C9A090
dim IID_ITaskbarList as guit = "56FDF342-FD6D-11D0-958A-006097C9A090"
dim ShellTaskBar as ITaskBarList 'пока не понимаю, просто или Ptr
CoInitialize(NULL) 'инициализируем com
CoCreateInstance(CLSID_TaskbarList,NULL,CLSCTX_INPROC_SERVER,IID_ITaskbarList,ShellTaskBar) 'походу получаем указатель на интерфейс.

а вот дальше надо разбиратся. попробую спереть исходник входящий в состав FlatAssembler, тупо его перевести на FreeBasic, а потом мудрить. там есть функция comcall, ее можно посмотреть в макросах, а потом перевести на FreeBasic. как я понял, получаем указатель на интерфейс, потом от этого указателя смотрим в перед, там лежат указатели на функции, но а там уже надо читать конкретную документацию по интерфейсу той или иной штуки. хотя я могу ошибаться, надеюсь, может всё-таки появится человек, который собаку на этом съел.
пробовал смотреть исходники от disphelper, они написаны на c, пока не разобрался. но а если она написана на c, значит и на FreeBasic можно.
библиотека disphelper, открытый проект, сайт:
http://sourceforge.net/projects/disphelper/

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 37
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: работаем с Component Object Model, или проще, с COM объектами

Сообщение  electrik в Ср Окт 08, 2008 8:27 pm

вот тут пытался разбиратся со всей этой хренью, но ни фига не разобрался. понял только то, что в предыдущем сообщении написал фигню- не удачный пример. все же выглядит по другому.

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 37
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: работаем с Component Object Model, или проще, с COM объектами

Сообщение  electrik в Ср Ноя 19, 2008 11:07 pm

привет. в архиве оф сайта FreeBasic:
http://freebasic.net/arch/file.php?id=39
появилась классная вещь, "AxSupport Package". что это такое, поддержка ActiveX/COM во FreeBasic. советую разобраться, вопервых, там не чистое winApi, работа с объектами происходит примерно как в visual basic. данная штука, более гибка, чем dispHelper, но и писать немного посложнее. так же есть супер вещь "AxSupport TypeLibraryBrowser", а это... короче эта штука, показывает все, что есть в системе из ax/com, выбираем нужный компонент, нажимаем кнопки типа "Invoke", и "vTable",она генерит заголовки под FreeBasic. насколько оно безошибочно, не проверял. там есть папочка "Samples", с примерами типа:
Dialog Example
Ax01-Ax Control Invoke Call
Ax02-Ax Control vTable Call
AxExcel
AxIE
Исходники AxSupport TypeLibraryBrowser
DIRECTX8
Nero6
SAYV - работа со SpeechApi

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 37
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: работаем с Component Object Model, или проще, с COM объектами

Сообщение  tux в Чт Ноя 20, 2008 1:16 pm

слухай, если будет время, напиши статейку интеграции библиотек из VB в FB, думаю многим интересно будет, особенно тем, кто переходит с VB
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 29
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: работаем с Component Object Model, или проще, с COM объектами

Сообщение  trew в Вс Апр 08, 2012 10:24 pm

Привет всем.

electrik! У тебя случайно не завалялись упомянутые тобой:

AxSupport Package и AxSupport TypeLibraryBrowser

После обновления оф.сайта не могу скачать из архива, а админы молчат как рыба об лед.

В свое время, когда мог качать, не обратил на это внимание.

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: работаем с Component Object Model, или проще, с COM объектами

Сообщение  electrik в Пн Апр 09, 2012 12:29 am

давно их не юзал. вот две версии. помоему, в какую-то надо дополнительные dll кидать.
вроде в одгной версии они есть.
http://dl.dropbox.com/u/63991073/axsuite.rar

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 37
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: работаем с Component Object Model, или проще, с COM объектами

Сообщение  trew в Пн Апр 09, 2012 5:35 am

вот две версии.

Спасибо большое.

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: работаем с Component Object Model, или проще, с COM объектами

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения