Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не получается подключить COM объект. / 13 сообщений из 13, страница 1 из 1
18.02.2014, 12:57
    #38564342
Kast2K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается подключить COM объект.
Добрый день!
Написал на С++ СОМ библиотеку.
В библиотеке всего одна функция
Код: plaintext
1.
2.
STDMETHODIMP TMyCodeBitmapGenerateImpl::GenerateMyFile(BSTR ATextToEncode,
   BSTR APathToSaveFile)



Имя библиотеки MyCode_COM_Library

Библиотека зарегистрирована в системе.

Итак, попытка №1:

Код: vbnet
1.
2.
3.
4.
5.
DataString = "data123"
Filename = "D:\img.bmp"
with CreateObject("MyCode_COM_Library.TMyCodeBitmapGenerateImpl")
.GenerateMyFile(DataString,Filename)
end with



Выдает ошибку Object Required

делю на части

Код: vbnet
1.
2.
3.
4.
5.
dim ws
dim wd

Set ws = CreateObject("MyCode_COM_Library.TMyCodeBitmapGenerateImpl")
Set wd = ws.GenerateMyFile(datastring, FileName)



Ошибка та же самая.

Искал по форуму (отчего-то поиск не всегда отрабатывает :( ).
Нашел ссылку http://www.sql.ru/forum/619196/sozdat-obekt-cherez-createobject

В VB в References подключил библиотеку
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Dim wd

Dim wa As MyCodeBitmapGenerate

datastring = "data123"
FileName = "D:\img123.bmp"

wd = wa.GenerateMyFile(datastring, FileName) ' пишу так, т.к. функция возвращает int



При компиляции выделяет
Код: vbnet
1.
.GenerateMyFile

и выдает ошибку Expected Function or Variable

Помогите, пожалуйста, разобраться с подключением COM библиотеки.

Спасибо.

Никогда не бойся делать то, что не умеешь.
Помни, профессионалы построили Титаник, а Ковчег любители.
...
Рейтинг: 0 / 0
18.02.2014, 13:00
    #38564353
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается подключить COM объект.
а где тут COM ?
я вижу стандартный exe
...
Рейтинг: 0 / 0
18.02.2014, 13:07
    #38564370
Kast2K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается подключить COM объект.
Konst_One,

Простите, где Exe?
...
Рейтинг: 0 / 0
18.02.2014, 13:37
    #38564468
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается подключить COM объект.
c++ у вас точно сделан под COM, я так вижу , что у вас стандартный метод , который надо в VB объявлять как DECLARE
...
Рейтинг: 0 / 0
18.02.2014, 14:01
    #38564527
Kast2K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается подключить COM объект.
Прошу прощения,
дополню свой изначальный вопрос.
Необходимо подключить COM библиотеку через VBScript.
Если я правильно читаю ответы гугла, то в VBScript declare не поддерживается.
...
Рейтинг: 0 / 0
18.02.2014, 14:03
    #38564536
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается подключить COM объект.
так где ваша com-библиотека?
вы можете сделать TLB и его зарегистрировать?
...
Рейтинг: 0 / 0
18.02.2014, 14:13
    #38564556
Kast2K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается подключить COM объект.
Konst_One,

Простите, я вас не понимаю.
Я должен приложить файл библиотеки и tlb?

вот они
http://yadi.sk/d/w_m-7AG6J7Q9U
...
Рейтинг: 0 / 0
18.02.2014, 14:23
    #38564575
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается подключить COM объект.
достаточно чтобы у вас в системе была возможность регистрации библиотеки класса для вашего com-сервера

смотрите CLSID своего класса и его создавайте через CreateObject("MyDll.MyClass")
проверьте через OLEView какие интерфейсы этого класса доступны атрибуты/функции/типы
...
Рейтинг: 0 / 0
18.02.2014, 15:28
    #38564712
Не получается подключить COM объект.
Kast2KВ VB в References подключил библиотеку
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Dim wd

Dim wa As MyCodeBitmapGenerate

datastring = "data123"
FileName = "D:\img123.bmp"

wd = wa.GenerateMyFile(datastring, FileName) ' пишу так, т.к. функция возвращает int



При компиляции выделяет
Код: vbnet
1.
.GenerateMyFile

и выдает ошибку Expected Function or VariableПравильно пишет. Потому что
Код: plaintext
1.
2.
3.
        HRESULT _stdcall GenerateAztecFile(
                        [in] BSTR ATextToEncode, 
                        [in] BSTR APathToSaveFile);

Никакого возвращаемого значения вроде
Код: plaintext
1.
[out, retval] long* result

не прописано, VB/VBA/VBS это трактует как метод-процедуру (Sub), о чём, кстати, и Object Browser (F2) говорит.
...
Рейтинг: 0 / 0
18.02.2014, 15:37
    #38564735
Kast2K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается подключить COM объект.
Konst_One,

Все таки я не понимаю до конца, как правильно обратиться к библиотеке.
Прикладываю скриншот OLEView.

В случае если я подключаю библиотеку в References и в VB пишу такой код
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Sub Command1_Click()

Dim azclib As AztecCodeBitmapGenerate

ds = "12343445454243442Data1234567890"
fp = "D:\imgDS.bmp"

Set azclib = New AztecCodeBitmapGenerate
azclib.GenerateAztecFile ds, fp

End Sub


то все отрабатывает.

Но, т.к. мне нужно запустить код именно из-под VBScript, то такая конструкция уже не подходит, т.к. система сразу ругается на строчку Dim azclib As AztecCodeBitmapGenerate .

Чую ведь, что ответ на поверхности, но не втыкаю :(
...
Рейтинг: 0 / 0
18.02.2014, 20:20
    #38565147
Kast2K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается подключить COM объект.
Коллеги,
Пытаюсь написать VBScript на основании вышеозвученного.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Dim ws
Dim we
Dim dt
Dim fp

dt = "123456789"
fp = "C:\imgDT.bmp"

Set we = CreateObject("AztecCode_COM_Library.TAztecCodeBitmapGenerateImpl")

Set ws = we.GenerateAztecFile(dt,fp) 'тут происходит затык. Вылетает ошибка 800A01A8. Object required



Получается, при выполнении
Код: vbnet
1.
Set we = CreateObject("AztecCode_COM_Library.TAztecCodeBitmapGenerateImpl")

объект не создается.
Но в таком случае, коллеги, посоветуйте как исправить эту ошибку?
Как же тогда правильно подключить эту несчастную библиотеку?
...
Рейтинг: 0 / 0
18.02.2014, 21:00
    #38565177
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается подключить COM объект.
Kast2K,

Проблема возможно в том что библиотека не содержит интерфейса IDispatcher, судя по скрину выше. Для позднего связывания через CreateObject данный интерфейс необходим для VBS. VB6/VBA может для раннего связывания брать информацию о типах из метаданных в DLL/TLB. Библиотеку ещё не смотрел, может дело в другом
...
Рейтинг: 0 / 0
19.02.2014, 08:37
    #38565450
Kast2K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается подключить COM объект.
VSVLAD,

В точку!
Добавил IDispatch interface в библиотеку и все заработало.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dim dt,fp
Dim we

dt="1234567890987654321"
fp="D:\imgDP.bmp"

Set we=CreateObject("AztecCode_COM_Library.AztecCodeBMPCreate")
we.GenerateBMPCode dt, fp

Set we=Nothing



Всем спасибо за помощь!

P.S. Если кому потребуется эта библиотека (создает BMP с кодом Aztec) - обращайтесь, отдам бесплатно :).
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не получается подключить COM объект. / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]