Вызов COM из Ассемблера.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Вызов COM из Ассемблера.

Сообщение xenomorph » 03.08.2005 (Ср) 19:03

np. Imperious Rex - Diesel Power

Привет всем!

Вводная:

Просьба ногами не пинать. 8-).
Вопрос Гурам.

Вопрос:

Как вызвать метод КОМ-а (ActiveX.dll написаной на ВБ),
или хотя бы инициализировать (т.е. загрузить в память так,
что бы выполнился Initialize главного объекта - т.е. необходимо
просто один раз передать управление на объект - определять
интерфейс взаимодействия ИМХО (или я не прав ???) необязательно)
из АССЕМБЛЕРА. ЧИСТОГО TASM-a, MASM32-a или FASM-a.

Вопрос отнюдь не детский.
Единственный пример до которого я добрался - находиться
в доках к МАЗМ-у. К сожалению, я его не доганяю.

Можно даже немного изменить формудировку ...
Вызов объекта используя ТОЛЬКО АПИ.
т.е. необходим аноалог CreateObject /// ...

Вопрос: кто-нибудь делел подобный финт ушами?
Поделитись сорсами! 8-).

Приветствуютьмся конструктивные предложения.
--
Заранее огромное спасибо!
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.08.2005 (Чт) 5:06

CoInitialize
CoCreateInstance
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Сообщение xenomorph » 04.08.2005 (Чт) 8:10

эээ ...
2 GSerg: красткость сестра таланта? :-).
А можно пример хоть какой-то? ...
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

8-)

Сообщение xenomorph » 04.08.2005 (Чт) 8:14

з.ы. ну пожжжжжжжаааааалуйста!
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.08.2005 (Чт) 10:52

Какой ещё пример? Всё тривиально.
Всё, что надо знать - CLSID.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

re

Сообщение xenomorph » 07.08.2005 (Вс) 12:14

GSerg:
Странная у тебя политика однако ...
напиисал: "я знаю как - это очень просто!"
????
и ?

CoInitialize
CoCreateInstance ...

В АПИ гайде деклараций этих радостей нет.

("Просто!" - Не факт - я уже инет перерыл в поисках примера ...
да, КОМ описан в ассемблере - 5 инструкций в упаковке
Хатча ...
Да, На ВБ это делаеться елементарно но НЕ на АПИ.
ИМХО вопрос не попса и задают его не каждый день)

Ни деклараций ... ни чего ...
Если знаешь - и хоть чуть чуть хочешь \ можешь помочь -
то помоги! А не хочешь - иак не трави душу!
Ну что за манера - написать "А это фи=Х=ня!" и смотаться ...

--
Я хотю написать полный аналог CreateCobject на АПИ на ВБ.

Где достать декларации:
CoInitialize
CoCreateInstance?

MSDN:
http://msdn.microsoft.com/library/defau ... 6afdec.asp

Как их объявить внутри ВБ?
Это каких либ функции ...?
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

ку

Сообщение xenomorph » 07.08.2005 (Вс) 13:31

GSerg:

;===================MASM32=================
invoke CoCreateInstance, ADDR CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, ADDR IID_IShellLink, ADDR psl
;===========================================

;====================MSDN==================
STDAPI CoCreateInstance(

REFCLSID rclsid, //Class identifier
LPUNKNOWN pUnkOuter, //Object is or isn't part of an aggregate
DWORD dwClsContext, //Context for running executable code
REFIID riid, //Interface identifier
LPVOID * ppv //Pointer to storage of interface pointer
);
;===========================================

1. Как получить REFCLSID? - GUID класса?
2. Обычо NULL
3. CLSCTX_INPROC_SERVER тоже понятно ...
4. Я так понимаю это GUID Интерфейса этого КОМ-а? Код для того у меня есть:

Код: Выделить всё
'====================VB=====================
Option Explicit

Private Declare Function CLSIDFromProgID Lib "ole32.dll" (ByVal lpszProgID As _
    Long, pCLSID As Any) As Long
Private Declare Function StringFromCLSID Lib "ole32.dll" (pCLSID As Any, _
    lpszProgID As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As _
    Any, source As Any, ByVal bytes As Long)
Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal pv As Long)

' Convert a ProgID (such as "Word.Application") into the
' string representation of its CLSID

Function ProgIdToCLSID(ByVal ProgID As String) As String
    Dim pResult As Long, pChar As Long
    Dim char As Integer, length As Long
    ' No need to use a special UDT
    Dim guid(15) As Byte
   
    ' get the CLSID in binary form
    CLSIDFromProgID StrPtr(ProgID), guid(0)
    ' convert to a string, get pointer to result
    StringFromCLSID guid(0), pResult
    ' find the terminating null char
    pChar = pResult - 2
    Do
        pChar = pChar + 2
        CopyMemory char, ByVal pChar, 2
    Loop While char
    ' now get the entire string in one operation
    length = pChar - pResult
    ' no need for a temporary string
    ProgIdToCLSID = Space$(length \ 2)
    CopyMemory ByVal StrPtr(ProgIdToCLSID), ByVal pResult, length
    ' release the memory allocated to the string
    CoTaskMemFree pResult
End Function
'====================VB=====================


И он работает. Но как получить GUID класса (он же CLSID?)
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 07.08.2005 (Вс) 14:33

А CLSIDFromProgID, по-твоему, делает что? :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

re

Сообщение xenomorph » 07.08.2005 (Вс) 20:05

ЭЭЭ понял.
Вопрос а GUID интерфейса?
Или юзать ИАнкновн прикажите?
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 08.08.2005 (Пн) 3:12

А вот IID интерфейса знать надо :)
Тебе же нужен какой-то? Хотя бы даже IDispatch, а то и просто IUnknown. Вот хотя бы их общеизвестные IID укажи :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 142

    TopList