PDA

Просмотр полной версии : Вопрос по Simple MAPI!



mon
24.12.2004, 15:06
Всем кто сталкивался при программировании с 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

Naeel Maqsudov
24.12.2004, 16:13
Добавьте в проект 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.