Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Разбор e-mail через CDO.Message + ADODB.Stream. Хочу сделать через позднее связывание. / 2 сообщений из 2, страница 1 из 1
04.05.2015, 02:04
    #38950925
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор e-mail через CDO.Message + ADODB.Stream. Хочу сделать через позднее связывание.
Собственно фрагмент кода:
Код: 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
04.05.2015, 03:15
    #38950946
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор e-mail через CDO.Message + ADODB.Stream. Хочу сделать через позднее связывание.
О, получилось.
Наткнулся на пример:
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
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Разбор e-mail через CDO.Message + ADODB.Stream. Хочу сделать через позднее связывание. / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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