Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372

    C++ [COM, API come interfaccia ad outlook]

    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

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372
    ... siamo alle solite ....

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372
    ... ma possibile nessuno abbia dei suggerimenti ?!??!?!

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372
    ... potete provare almeno lo script ??????

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372
    ... bho ???

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    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 ...

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372
    ... 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

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    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 ...)

    codice:
    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);

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372
    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 ...)

    codice:
    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???

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Fai vedere il codice nuovo ...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.