Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
DLL e Outlook
venerdì 16 maggio 2003 - 11.47
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
caio
Profilo
| Newbie
2
messaggi | Data Invio:
ven 16 mag 2003 - 11:47
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
7.999
messaggi | Data Invio:
ven 16 mag 2003 - 12:24
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
2
messaggi | Data Invio:
mer 21 mag 2003 - 12:07
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
7.999
messaggi | Data Invio:
mer 21 mag 2003 - 12:18
:)
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
Torna su
Stanze Forum
Elenco Threads
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 !