Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

COM Klasse CConverterSession instanziieren

2 views
Skip to first unread message

Volker Bartheld (SPAM only)

unread,
Jan 19, 2005, 10:52:04 AM1/19/05
to
Hallo!

Ich oute mich im folgenden als ein totaler COM-Nixchecker:

Ich versuche naemlich gerade, mit dem IConverterSession Interface
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/olintapi/html/oliaIConverterSession_HV01154520.asp)
zu arbeiten. Mein OLE/COM Object Viewer sagt mir, dass sich ein Objekt
mit der CLSID_IConverterSession und dem Inproc-Server
"%PROGRAM%\Microsoft Office\Office11\Outlmime.dll" auf meinem System
befindet (und hat wohl auch eine Instanz angelegt, immerhin bietet er
mir "Release Instance" an). Die CLSID ist
{4e3a7680-b77a-11d0-9da5-00c04fd65685} und deckt sich mit den
diesbezueglichen #defines

#if !defined(INITGUID) || defined(USES_IID_IConverterSession)
// {4e3a7680-b77a-11d0-9da5-00c04fd65685}
DEFINE_GUID(CLSID_IConverterSession, 0x4e3a7680, 0xb77a, 0x11d0, 0x9d, 0xa5, 0x0, 0xc0, 0x4f, 0xd6, 0x56, 0x85);
// {4b401570-b77b-11d0-9da5-00c04fd65685}
DEFINE_GUID(IID_IConverterSession, 0x4b401570, 0xb77b, 0x11d0, 0x9d, 0xa5, 0x0, 0xc0, 0x4f, 0xd6, 0x56, 0x85);
#endif // #if !defined(INITGUID) || defined(USES_IID_IConverterSession)

, die ich mir gegoennt habe. Weiters habe ich ein .h-file
zusammengestrickt (Dank gebuehrt Dmitry Streblechenko und Jochen
Dueckminor), das die entsprechenden Klassen- und Interfacedeklarationen
enthaelt (s. unten).

Naiv wie ich nunmal bin, versuch(t)e ich

#define USES_IID_IConverterSession
#include <initguid.h>
#include <edkguid.h>
#include <edk.h>
#include <mapiform.h>
#include <mapiutil.h>
#include "convertersession.h"
// [...]
IConverterSession* pConverterSession=NULL;
hr=CoCreateInstance(CLSID_IConverterSession, NULL, CLSCTX_INPROC_SERVER, IID_IConverterSession, (void**)pConverterSession);

, was mir auch prompt mit E_INVALIDARG um die Ohren flog. Wie macht man
es richtig? Bitte langsam sprechen, damit ich es auch verstehe! ;-)

Danke & Gruss,
Volker


<convertersession.h>
#ifndef CONVERTERSESSION_H_INCLUDED
#define CONVERTERSESSION_H_INCLUDED

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <comdef.h>
#include <Guiddef.h>


#if !defined(INITGUID) || defined(USES_IID_IConverterSession)
// {4e3a7680-b77a-11d0-9da5-00c04fd65685}
DEFINE_GUID(CLSID_IConverterSession, 0x4e3a7680, 0xb77a, 0x11d0, 0x9d, 0xa5, 0x0, 0xc0, 0x4f, 0xd6, 0x56, 0x85);
// {4b401570-b77b-11d0-9da5-00c04fd65685}
DEFINE_GUID(IID_IConverterSession, 0x4b401570, 0xb77b, 0x11d0, 0x9d, 0xa5, 0x0, 0xc0, 0x4f, 0xd6, 0x56, 0x85);
#endif // #if !defined(INITGUID) || defined(USES_IID_IConverterSession)

typedef enum tagENCODINGTYPE {
IET_BINARY = 0,
IET_BASE64 = 1,
IET_UUENCODE = 2,
IET_QP = 3,
IET_7BIT = 4,
IET_8BIT = 5,
IET_INETCSET = 6,
IET_UNICODE = 7,
IET_RFC1522 = 8,
IET_ENCODED = 9,
IET_CURRENT = 10,
IET_UNKNOWN = 11,
IET_BINHEX40 = 12,
IET_LAST = 13
} ENCODINGTYPE;

typedef enum tagCCSF
{
CCSF_SMTP = 0x0002,
CCSF_NOHEADERS = 0x0004,
CCSF_NO_MSGID = 0x4000,
} CCSF;

class __declspec(uuid("4e3a7680-b77a-11d0-9da5-00c04fd65685"))
CConverterSession;
/*#define CLSID_IConverterSession __uuidof(CConverterSession)*/
interface __declspec(uuid("4b401570-b77b-11d0-9da5-00c04fd65685"))
IConverterSession;
_COM_SMARTPTR_TYPEDEF(IConverterSession,__uuidof(IConverterSession));
/*#define IID_IConverterSession __uuidof(IConverterSession)*/

/**
* Allows conversions between MIME objects and MAPI messages.
* This can be useful in transporting messages across the Internet.
*
* @remarks Only these methods are supported in this interface:
*
* IConverterSession::SetEncoding, IConverterSession::MAPIToMIMEStm,
* and IConverterSession::MIMEToMAPI.
*
* Call SetEncoding before using the other methods to perform conversion.
*/
interface IConverterSession : public IUnknown
{
private:
STDMETHOD(placeholder0)() PURE;
public:
/**
* Initializes the encoding to be used during conversion.
*
* @retval E_INVALIDARG The encoding type passed was invalid.
*/
STDMETHOD(SetEncoding)(
/**
* An ENCODINGTYPE value. Only the following values are supported:
*
* IET_BASE64, IET_UUENCODE, IET_QP, IET_7BIT, IET_8BIT
*/
ENCODINGTYPE et) PURE;

private:
STDMETHOD(placeholder2)() PURE;
public:
/**
* Converts a MIME stream to a MAPI message.
*
* @retval E_INVALIDARG pstm is NULL, pmsg is NULL,
* or ulFlags is invalid.
*/
STDMETHOD(MIMEToMAPI)(
/** [in] IStream interface to a MIME stream. */
LPSTREAM pstm,
/** [out] Pointer to the message to load. */
LPMESSAGE pmsg,
/** [in] This value must be NULL. */
LPCSTR pszSrcSrv,
/** [in] Flags. Zero (0) is the only supported value. */
ULONG ulFlags) PURE;
/**
* Converts a MAPI message to a MIME stream.
*
* @retval E_INVALIDARG Invalid flags were passed,
* or pmsg or pstm is NULL.
*
* @remarks Supported only for standard Outlook message types.
*/
STDMETHOD(MAPIToMIMEStm)(
/** [in] Pointer to the message to convert. */
LPMESSAGE pmsg,
/** [out] IStream interface to output the stream. */
LPSTREAM pstm,
/** [in] A flag of one of the following types:
* CCSF_NO_MSGID
* Do not include Message-Id field in outgoing messages.
* CCSF_NOHEADERS
* The converter should ignore the headers of the outside message.
* CCSF_SMTP
* The converter is being passed an SMTP message.
*/
ULONG ulFlags) PURE;
private:
STDMETHOD(placeholder5)() PURE;
STDMETHOD(placeholder6)() PURE;
STDMETHOD(placeholder7)() PURE;
STDMETHOD(placeholder8)() PURE;
STDMETHOD(placeholder9)() PURE;
STDMETHOD(placeholder10)() PURE;
STDMETHOD(placeholder11)() PURE;
};

#endif // #ifndef CONVERTERSESSION_H_INCLUDED
</convertersession.h>

__
Mail replies to/an V B A R T H E L D at G M X dot D E

Stefan Kreuzhuber

unread,
Jan 19, 2005, 11:13:51 AM1/19/05
to
Volker Bartheld (SPAM only) wrote:
> Hallo!

> // [...]
> IConverterSession* pConverterSession=NULL;
> hr=CoCreateInstance(CLSID_IConverterSession, NULL, CLSCTX_INPROC_SERVER, IID_IConverterSession, (void**)pConverterSession);

Hallo Volker,

ohne mir den Rest angesehen zu haben: es fehlt der Adressoperator beim
letzten Parameter (Tippfehler?)

hr=CoCreateInstance(CLSID_IConverterSession, NULL, CLSCTX_INPROC_SERVER,
IID_IConverterSession, (void**) &pConverterSession);

Volker Bartheld (SPAM only)

unread,
Jan 19, 2005, 11:23:51 AM1/19/05
to
Hi Stefan!

>Volker Bartheld (SPAM only) wrote:
>> // [...]
>> IConverterSession* pConverterSession=NULL;
>> hr=CoCreateInstance(CLSID_IConverterSession, NULL, CLSCTX_INPROC_SERVER, IID_IConverterSession, (void**)pConverterSession);

On Wed, 19 Jan 2005 17:13:51 +0100, Stefan Kreuzhuber
<stefan.k...@nospam.gmx.at> wrote :


>ohne mir den Rest angesehen zu haben: es fehlt der Adressoperator beim
>letzten Parameter (Tippfehler?)
>hr=CoCreateInstance(CLSID_IConverterSession, NULL, CLSCTX_INPROC_SERVER,
>IID_IConverterSession, (void**) &pConverterSession);

Almaechtiger! Ich Depp. Unpackbar. Das hat man nun davon, wenn man 12
Stunden/Tag vor dem Monitor haengt. "S_OK" kann ich da nur sagen. Danke.
Ich gehe jetzt in Urlaub.

Volker

Andre Stille [MVP]

unread,
Jan 20, 2005, 5:08:00 AM1/20/05
to
Hallo!

"Volker Bartheld (SPAM only)" <dr_ve...@freenet.de> schrieb im Newsbeitrag
news:357fnfF...@individual.net...


>
> Almaechtiger! Ich Depp. Unpackbar. Das hat man nun davon, wenn man 12
> Stunden/Tag vor dem Monitor haengt. "S_OK" kann ich da nur sagen. Danke.
> Ich gehe jetzt in Urlaub.
>

Hier auch gleich die Empfehlung: Nimm eine Smart-Pointer-Klasse und
versuch das ganze nicht auf C-Ebene zu machen, wenn du nicht unbe-
dingt musst.

MfG
Andre Stille


0 new messages