PB und ComatePlus - Outlook

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
henry.mager
Beiträge: 2
Registriert: 08.07.2011 09:53

PB und ComatePlus - Outlook

Beitrag von henry.mager »

Hallo,

ich habe folgendes Problem:
Es soll unter Windows auf ein Exchange-Postfach zugegriffen werden und Mails bearbeitet werden.
Dazu wollte ich ComatePlus nutzen. Klappt auch fast alles, nur:
Am Ende des Programms läuft die Outlook.exe weiter, obwohl sie eigentlich beendet werden soll.
Ich hab mal ein Testprgramm erstellt, welches den Fehler enthält:

Code: Alles auswählen

;erstellt unter Verwendung von:

;/////////////////////////////////////////////////////////////////////////////////
;***COMate***  COM automation through iDispatch.
;*===========
;*
;*Outlook demo by Marco2007.
;/////////////////////////////////////////////////////////////////////////////////

EnableExplicit

XIncludeFile "c:\Programme\PureBasic\COMatePlus\COMatePLUS.pbi" 

Define.COMateObject OutlookObject, empf_wetter, folder_wetter_inbox, NS
Define.l lObject_handler


Define.s str_kommando
Define.l hStatement, hResult

  
  OutlookObject = COMate_CreateObject("Outlook.Application") 
  
  If OutlookObject 
    
    ;namespace festlegen
    str_kommando = "GetNamespace(" + Chr(39) + "MAPI" + Chr(39) + ")"
    ns=OutlookObject\GetObjectProperty(str_kommando)
    If ns
       ;Empfänger anlegen
       str_kommando = "Logon(" + Chr(39) + "H0815" + Chr(39) + ",#nullstring, #FALSE, #TRUE)" ;H0815 - Profilname
       hStatement = COMate_PrepareStatement(str_kommando)
       hResult = ns\invoke("", hStatement)
       str_kommando = "CreateRecipient(" + Chr(39) + "A12345" + Chr(39) + ")" ;A12345 - Adressbucheintrag
       empf_wetter = ns\GetObjectProperty(str_kommando)
       If empf_wetter
         lObject_handler = empf_wetter\GetCOMObject()
         ; Ordnerobjekt anlegen
         ;kommandostring für Folder erstellen
         str_kommando = "GetSharedDefaultFolder(" + Str(lObject_handler) + " as iDispatch, 6)"
         hStatement = COMate_PrepareStatement(str_kommando)
         If hStatement = 0
           MessageRequester("COMatePLUS!", "Couldn't create the statement!" + #CRLF$ + #CRLF$ + "COMatePLUS error : " + COMate_GetLastErrorDescription())
           End
         EndIf
         folder_wetter_inbox = ns\GetObjectProperty("", hStatement)
         If folder_wetter_inbox
            folder_wetter_inbox\Release()
            Debug COMate_GetLastErrorDescription()
         Else
           MessageRequester("Folder Wetter inbox konnte nicht angelegt werden", "- ns\GetObjectProperty(" + Chr(10) + str_kommando + ")" + Chr(10) + COMate_GetLastErrorDescription()) 
         EndIf
         empf_wetter\Release()
       Else
         MessageRequester("Empfänger konnte nicht angelegt werden", "- ns\GetObjectProperty(" + Chr(10) + str_kommando + ")" + Chr(10) + COMate_GetLastErrorDescription()) 
       EndIf
       ns\Invoke("Logoff")
       Debug COMate_GetLastErrorDescription()
      ns\Release()
    Else
      MessageRequester("Namespace konnte nicht angelegt werden", "- ns\GetObjectProperty(" + Chr(10) + str_kommando + ")" + Chr(10) +  COMate_GetLastErrorDescription()) 
    EndIf
    hResult=OutlookObject\Invoke("Quit")
    Debug COMate_GetLastErrorDescription()
    OutlookObject\Release() 
  Else 
    MessageRequester("Outlook Objekt konnte nicht angelegt werden", "- ns\GetObjectProperty(" + Chr(10) + str_kommando + ")" + Chr(10) +  COMate_GetLastErrorDescription()) 
  EndIf
End
Versuche ich das Gleiche mit VBS oder VBA, wird die Outlook.exe beendet.

Code: Alles auswählen

Sub test()
Dim i, app_out, ns, empf_wetter

Dim folder_wetter_inbox

Set app_out = CreateObject("Outlook.Application")
Set ns = app_out.GetNamespace("MAPI")
ns.Logon "H0815", , False, True
Set empf_wetter = ns.CreateRecipient("A12345")
'
''Ordnerobjekte anlegen


Set folder_wetter_inbox = ns.GetSharedDefaultFolder(empf_wetter, 6)

'Aufräumen

Set folder_wetter_inbox = Nothing
Set empf_wetter = Nothing
Set ns = Nothing
Set app_out = Nothing

End Sub
Wo liegt mein Fehler?

Ich hatte schon mal bei
http://www.development-lounge.de/viewto ... =31&t=6629
nachgefragt, dort aber bis jetzt keine Antwort bekommen.


Vielen Dank schon mal für Hinweise.
H. Mager
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Re: PB und ComatePlus - Outlook

Beitrag von marco2007 »

Ich weiß nicht wirklich, was der Code machen soll :oops:
Ich habe zwar Office2007, aber ich benötige die Office-Produkte (außer Access - und da ist mir sqlite bei den meisten Anwendungen auch schon lieber) eigentlich überhaupt nicht.

Läuft Outlook.exe auch weiter, wenn Du z.B.: den empf_wetter-Teil entfernst?
Welche Version von Outlook hast Du?
Windows 11 - PB 6.03 x64
_________________________________
henry.mager
Beiträge: 2
Registriert: 08.07.2011 09:53

Re: PB und ComatePlus - Outlook

Beitrag von henry.mager »

Vielen Dank für die Antwort.

Der Code macht gar nix, das ist nur eine leere Hülle, die das Problem zeigen soll.
Wenn ich den Teil mit dem Empfänger weglasse, wird die Outlook.exe beendet. Da ich aber die Mails aus diesem Posteingang bearbeiten möchte, kann ich das im richtigen Progrämmchen nicht so gut weglassen ;)
Es sollen die Mails angeschaut werden und wenn eine bestimmte eingetroffen ist, muss ein Anhang abgetrennt und gespeichert werden. Das klappt auch alles und dass die Exe weiter da ist, ist hoffentlich auch nur ein kosmetisches Problem. Ich bin aber pingelig...

Ich habe Outlook 2003.

Henry Mager
Antworten