PDA

Visualizza la versione completa : COM e interfaccia ad Outlook


stefanoB
04-05-2006, 12:49
premetto che non voglio utilizzare VC++ e MFC ma API e MinGWStudio

Lo scopo creare codice che inserisca un nuovo nominativo nella cartella contatti di outloook;

partendo dal principio di ottenere pi istanze della classe attraverso l'uso di IClassFactory ho iniziato a fare qualche test in particolare il seguente ottenere il CLSID da ProgID:


#define STRICT
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <objbase.h>

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow) {
HRESULT hr;
SCODE scode;
LPCOLESTR lpszProgID = L"Outlook.Application.8";
LPCLSID pclsid;
hr = CLSIDFromProgID(lpszProgID,pclsid);

if hr != 0) {
scode = GetScode(hr);
if (FAILED(scode)) {
MessageBox(0, "NON CI SIAMO PROPRIO","Avviso",MB_OK | MB_ICONINFORMATION);
}
}
return(0);
}


questo il risultato:

Compiling source file(s)...
outlook.cpp
Linking...
C:\MinGWStudio\Samples\outlook\Debug\outlook.o: In function `WinMain':
'
collect2: ld returned 1 exit status

outlook.exe - 0 error(s), 0 warning(s)


... ma l'eseguibile non viene creato

stefanoB
08-05-2006, 07:58
... siamo alle solite .... :sonno:

stefanoB
16-05-2006, 07:40
... ma possibile nessuno abbia dei suggerimenti ?!??!?!
:dh:

stefanoB
22-05-2006, 07:22
... potete provare almeno lo script ??????

stefanoB
25-05-2006, 14:45
... bho ??? :dh:

oregon
25-05-2006, 17:06
Se nessuno ti risponde ci sara' un motivo ...

Personalmente non uso MinGWStudio (ma VC) e quindi non ti so dire perche' non viene generato l'exe (sebbene mi sembri strano ...).

Non uso Outlook e quindi non posso provare il programma ...

Mi dispiace ...

stefanoB
26-05-2006, 08:08
... sono riuscito a creare l'eseguibile, linkando la libreria ole32...

comunque adesso ho un problema di crash in esecuzione dovuto al fatto che forse esegue o non gli torna qualche valore ... devo capire perch

... grazie comunque !!! non si rifiuta alcun aiuto :ciauz:

oregon
26-05-2006, 10:30
Ok ... non uso Outlook pero' ti posso dire che hai commesso qualche errore nella scrittura del codice ...

Prima di tutto, qualsiasi programma che utilizza COM, deve inizializzare il sistema e deinizializzarlo all'uscita.

In piu' la funzione CLSIDFromProgID accetta come ultimo parametro un puntatore a quello che e' un GUID. Tu passi un puntatore che pero' non punta a nulla ... Il codice dovrebbe quindi essere (con le modifiche in grassetto ...)



HRESULT hr;
SCODE scode;
LPCOLESTR lpszProgID = L"Outlook.Application.8";
GUID clsid;

CoInitialize(0);

hr = CLSIDFromProgID(lpszProgID, &clsid);

if(hr)
{
scode = GetScode(hr);
if (FAILED(scode))
MessageBox(0, "NON CI SIAMO PROPRIO","Avviso",MB_OK | MB_ICONINFORMATION);
}

CoUninitialize();

return(0);

stefanoB
01-06-2006, 07:35
Originariamente inviato da oregon
Ok ... non uso Outlook pero' ti posso dire che hai commesso qualche errore nella scrittura del codice ...

Prima di tutto, qualsiasi programma che utilizza COM, deve inizializzare il sistema e deinizializzarlo all'uscita.

In piu' la funzione CLSIDFromProgID accetta come ultimo parametro un puntatore a quello che e' un GUID. Tu passi un puntatore che pero' non punta a nulla ... Il codice dovrebbe quindi essere (con le modifiche in grassetto ...)



HRESULT hr;
SCODE scode;
LPCOLESTR lpszProgID = L"Outlook.Application.8";
GUID clsid;

CoInitialize(0);

hr = CLSIDFromProgID(lpszProgID, &clsid);

if(hr)
{
scode = GetScode(hr);
if (FAILED(scode))
MessageBox(0, "NON CI SIAMO PROPRIO","Avviso",MB_OK | MB_ICONINFORMATION);
}

CoUninitialize();

return(0);


quindi il crash era dovuto a ci ... adesso non si verifica pi ... ho fatto per una modifica per controllare i valori ritornati in hr;
sono poi andato avanti creando l'istanza di una Class Factory ed ottenendo l'interfaccia IClassFactory e fin qui Ok poi tramite il metodo CreateInstance volevo creare l'instanza ... ma non conosco il riferimento all'interfaccia (REFIID riid) o meglio IClassFactory ne ha diverse ma quale utilizzare per accedere ai metodi di outlook???

oregon
01-06-2006, 11:04
Fai vedere il codice nuovo ...

Loading