DLL e Outlook

venerdì 16 maggio 2003 - 11.47

caio Profilo | Newbie

Ciao a Tutti, vi spiego il mio problema.
Sto customizzando un programma che ha un suo ambiente di sviluppo. In questo ambiente si possono scrivere script in "VBA like". Like xché non si riesce a fare tutto quello che si fa con VBA, infatti non c'è verso di interfacciarsi con Outlook... almeno io non ci sono riuscito. Visto che la documentazione che ho sul programma è scadente ho seguito un'altra strada. Dagli script posso richiamare funzioni scritte in dll. Grazie all'articolo trovato in questo sito ho fatto la mia prima dll e sono riuscito a riciamarla. A questo punto non mi resta che inerfacciami ad Outlook con la Dll?!??! si può fare? come si fa?
Sinceramente le mie scarse conoscenze di Visual C++ non sono sufficienti!
Help please!

Ciao
Caio

Brainkiller Profilo | Guru

Ciao Caio,
gli articoli purtroppo sono stati scritti in prospettiva .NET quindi abbiamo creato una DLL che si poteva utilizzare dall'interno di un programma C# per esempio o VB.NET.
Ciò non toglie che la DLL si possa utilizzare anche da ambienti diversi come Visual Basic 6.0 oppure da VBA e quindi Word, Excel, Outlook, ecc.

Visual Basic 6 e/o VBA non supportano però le funzioni esportate con __declspec(dllexport).
Infatti è necessario per queste funzioni usare un comando aggiuntivo chiamato __stdcall.
In questo modo, ricompilando la DLL sarà possibile utilizzarla anche da Outlook con una dichiarazione di questo tipo:

Private Declare Function Somma Lib "sumdll.dll" (ByVal a As Integer, ByVal b As Integer) As Integer

tipica degli ambienti basati su Visual Basic.
Purtroppo però mancano altre cose, perchè prima di compilare la DLL è necessario aggiungere anche un file .DEF che serve per rimappare i nomi delle funzioni esportate in altro modo.

Da quanto ho capito quindi tu hai bisogno di richiamare delle funzioni in una DLL che hai creato da Outlook oppure dal tuo ambiente che usa un linguaggio VBA Like? Perchè se fosse la seconda opzione bisogna capire che cosa permette di fare questo vostro sotto-linguaggio.
Aspetto tue risposte.
Ciao

David

caio Profilo | Newbie

Ciao

Ci sono riuscito e anche grazie all'aggiunta del parametro __stdcall nella dichiarazione del metodo.
La Dll la richiamo dall'ambiente VBA like, e al dll mi permette di interfacciarmi ad outlook. Lo scopo della mia dll è quello aggiungere un file in attachment alle e-mail contenute nella cartella bozze.

ho aggiunto nel file stdafx.h gli import delle librerie necessarie per collegarmi ad outlook:

/*
Importo le librerie necessarie per utilizzare gli oggetti Com di outlook

*/
#import "C:\Programmi\File comuni\Microsoft Shared\Office10\mso.dll" rename_namespace("Office") named_guids
using namespace Office;

#import "C:\Programmi\Microsoft Office\Office10\MSOUTL.olb" rename("CopyFile","CpFile"),rename_namespace("Outlook")//, raw_interfaces_only, named_guids
//, no_namespace exclude("_IRecipientControl", "_DRecipientControl")
//,rename_namespace("Outlook")//, raw_interfaces_only, named_guids
using namespace Outlook;

e il codice della mia funzione è questo:

extern "C" __declspec(dllexport) int __stdcall attachFile_ToEmail(char *path)
{
// dichiaro le variabili
_ApplicationPtr pApp;
_NameSpacePtr nSpace;
MAPIFolderPtr fdBozze;
_ItemsPtr itemBozze;
_MailItemPtr pMail;
AttachmentsPtr attachItem;
int nMail,i;

// inizializzo le variabili
nMail = 0;
try{
pApp.CreateInstance("Outlook.Application");
nSpace = pApp->GetNamespace("MAPI");
fdBozze = nSpace->GetDefaultFolder(olFolderDrafts);
itemBozze = fdBozze->Items;
nMail = itemBozze->Count;
for(i=1;i<= nMail; i++){
pMail = itemBozze->Item(i);
attachItem = pMail->Attachments;
attachItem->Add(path);
pMail->Save();
}
return nMail;
}
catch(_com_error &e)
{
return 1;
}
}


Per il momento funziona.... sicuramente va un po' migliorato.

Grazie dell'aiuto.

Ciao
Caio

Brainkiller Profilo | Guru

:)

Sono contento che abbia funzionato!
Certo, un codice può essere sempre migliorato, ma se già svolge correttamente le funzioni di cui abbiamo bisogno già è un ottimo risultato!

Ciao
David
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5