Страница 1 из 1

Вопрос по Simple MAPI!

Добавлено: 24 дек 2004, 15:06
mon
Всем кто сталкивался при программировании с Simple MAPI должны быть известны 2 функции, а точнее:
MAPISendMail и MapiSendDocuments!
Долго бродя по интернету нашел способ вызывать эти функции из VB вот таким вот способом:

Код: Выделить всё

Public Declare Function MAPISendMail Lib "MAPI32.DLL" Alias "BMAPISendMail" (ByVal Session&, ByVal _
UIParam&, Message As MAPIMessage, Recipient() As MapiRecip, File() As MapiFile, ByVal Flags&, ByVal _
Reserved&) As Long
Тут идет декларирование функции из библиотеки!
Но а если мне нужно наделить скажем какой-нибудь объект этими функциями, то как его вызвать?
Хочу получить нечто на подобии вот этого:

Код: Выделить всё

Set MAPI = CreateObject("Чего-то там")
MAPI.MAPISendMail 
или 
MAPI.MapiSendDocuments

Добавлено: 24 дек 2004, 16:13
Naeel Maqsudov
Добавьте в проект vb/vba класс (модуль класса). Дайте модулю название MAPI.

Все процедуры и функции этого объекта - это его методы.

В модуле класса влючите оператор Declare (но с атрибутом PRIVATE а не PUBLIC).

Затем опишите функцию SendMail, в которой вызывайте API-шную функцию MAPISendMail. Аналогично SendDocuments.

В любом другом модуле:

Код: Выделить всё

Sub qwe()
  Dim X As MAPI
  Set X = New MAPI
  X.SendMail(.....)
  ......
  Set X = Nothing
End Sub
Можно проще (с автоматической инициализации экзкмпляра (инстанса) объекта):

Код: Выделить всё

Sub qwe()
  Dim X As New MAPI
  X.SendMail(.....)
  ......
  Set X = Nothing
End Sub
Но а если мне нужно наделить скажем какой-нибудь объект этими функциями

Какой-нибудь объект "наделить этими функциями" нельзя. Можно только реализовать данные методы в классе, который сами создаете, а потом инициализаровать сколько угодно экземпляров (инстансов) объектов данного класса.

Если Вы создаете не VB/VBA-класс, а OLE/COM/ActiveX-объект, который компилируете в exe или dll, то после компиляции и регистрации в реестре Вы уже сможете в других приложениях создавать его инстансы по CreateObject/CreateRemoteObject.