powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Разбор e-mail через CDO.Message + ADODB.Stream. Хочу сделать через позднее связывание.
2 сообщений из 2, страница 1 из 1
Разбор e-mail через CDO.Message + ADODB.Stream. Хочу сделать через позднее связывание.
    #38950925
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно фрагмент кода:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
    Dim mmm As CDO.Message = LoadMessageFromFile(MsgFile)
...
    GetMsgInfoCDO.Subject = mmm.Subject
    GetMsgInfoCDO.Body = mmm.TextBody
    For Each att As CDO.IBodyPart In mmm.Attachments
и т.д.

  ' Reference to Microsoft ActiveX Data Objects (в VB6 была ссылка на 2.6, не суть)
  ' Reference to Microsoft CDO for Windows 2000 Library
  Private Function LoadMessageFromFile(ByVal Path As String) As CDO.Message
    Dim Stm As New ADODB.Stream
    Stm.Open()
    Stm.LoadFromFile(Path)
    Dim iMsg As New CDO.Message
    Dim iDsrc As CDO.IDataSource
    iDsrc = iMsg
    iDsrc.OpenObject(Stm, "_Stream")
    LoadMessageFromFile = iMsg
  End Function



В VB6 у меня были добавлены ссылки на CDO и на ADODB.
В .Net если идти по тому же пути раннего связывания получаем потенциальную задницу типа той что в соседнем топике.
То бишь при создании обертки Interop.CDO.dll (на Win8.1+VS2013) любимой версии 1.0.0.0, она начинает тянуть за собой ADODB версии 6.0 (задница на XP где приемлимой является ADODB v.2.8 обеспечена, можно даже не проверять, Interop.CDO.dll созданный таким путем очевидно дохлый).

В данном случае мне не нужны события, посему нафиг ссылки и позднее связывание полагаю оптимально.
Переписываем код:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
    Dim mmm As Object = LoadMessageFromFile(MsgFile)
...
    GetMsgInfoCDO.Subject = mmm.Subject
    GetMsgInfoCDO.Body = mmm.TextBody
    For Each att In mmm.Attachments
и т.д.
  Private Function LoadMessageFromFile(ByVal Path As String) As Object 'CDO.Message
    Dim Stm = CreateObject("ADODB.Stream") 'As New ADODB.Stream
    Stm.Open()
    Stm.LoadFromFile(Path)
    Dim iMsg = CreateObject("CDO.Message") ' As New CDO.Message
    Dim iDsrc As Object ' CDO.IDataSource
    iDsrc = iMsg
    iDsrc.OpenObject(Stm, "_Stream")
    LoadMessageFromFile = iMsg
  End Function



Получаем спотык на выделенной нижней строчке.
Не знаю что писать вместо CDO.IDataSource , As Object не катит.
Как извернуться?
...
Рейтинг: 0 / 0
Разбор e-mail через CDO.Message + ADODB.Stream. Хочу сделать через позднее связывание.
    #38950946
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О, получилось.
Наткнулся на пример:
https://msdn.microsoft.com/en-us/library/aa563592(v=exchg.80).aspx

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
  Private Function LoadMessageFromFile(ByVal Path As String) As Object 'CDO.Message
    Dim Stm = CreateObject("ADODB.Stream") 'As New ADODB.Stream
    Stm.Open()
    Stm.LoadFromFile(Path)
    Dim iMsg = CreateObject("CDO.Message") ' As New CDO.Message
    Dim iDsrc As Object = iMsg.DataSource ' get IDataSource interface
    iDsrc.OpenObject(Stm, "_Stream")
    LoadMessageFromFile = iMsg
  End Function



Хотя и нифига не понял. Но зафурычило как хотел.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Разбор e-mail через CDO.Message + ADODB.Stream. Хочу сделать через позднее связывание.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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