c++ simple code get outlook-version over msi.lib
-
Guten Abend zusammen,
mein erster Beitrag und meine erste Frage:
Wer kann mir die main Prozedur zum Aufruf folgender bei Microsoft publizierten Prozedur ansagen?http://msdn.microsoft.com/en-us/library/dd941331(office.14).aspx
Es geht um die Feststellung der Outlook-Version via msi.lib
Wäre echt nett, wenn mir da geholfen werden könnte, ich bekomme noch Hörner über den Kram.
PS: Ich weiss das es Tools für so etwas gibt, ich möchte aber c++ code, wenn es geht ohne .NET
-
TCHAR szVersion[MAX_PATH] = {0}; BOOL bIs64Bit = FALSE; if SUCCEEDED(GetOutlookVersionString(LPTSTR* ppszVer, BOOL* pf64Bit)) { _tprintf(_T("Version: %s, 64Bit: &d"),szVersion, bIs64Bit); }
-
Jochen Kalmbach schrieb:
TCHAR szVersion[MAX_PATH] = {0}; BOOL bIs64Bit = FALSE; if SUCCEEDED(GetOutlookVersionString(LPTSTR* ppszVer, BOOL* pf64Bit)) { _tprintf(_T("Version: %s, 64Bit: &d"),szVersion, bIs64Bit); }
Danke für die schnelle Antwort. Doch das hakt ja wohl noch, denn was ist mit den Argumenten "ppszVer" und "pf64Bit"?
-
LPTSTR szVersion; BOOL bIs64Bit = FALSE; if SUCCEEDED(GetOutlookVersionString(&szVersion, &bIs64Bit)) { _tprintf(_T("Version: %s, 64Bit: &d"),szVersion, bIs64Bit); free(szVersion); }
-
Vielen Dank, das war auch mein Ansatz - leider rennt es nicht, dafür funktioniert aber dies hier:
http://msdn.microsoft.com/en-us/library/bb905147.aspx
Im Prinzip das Gleiche, ohne 64 Bit-Abfrage. Dann muss in der Erstgenannten Routine
http://msdn.microsoft.com/en-us/library/dd941331(office.14).aspx
wohl irgend etwas faul sein.
Aber ich kann es nicht finden....
-
Nun geht es darum, während des Runtime die richtigen DLL's zu laden:
int main() { LPTSTR szVersion; BOOL L_OK = TRUE; BOOL fFreeLib = TRUE; // Prüfe Outlook Version if( GetOutlookVersionString(&szVersion) == S_OK ) { // Version in eine Zahl umwandeln // z.B. Outlook 2007 = 12 char *pVersion = (char *)malloc( 2 ); wcstombs(pVersion, szVersion, 2); // Outlook 2000 ist 9 if( strcmp(pVersion, "9." ) ) strcpy(pVersion, "9"); int Version = atoi(pVersion); // Speicher frei geben if(pVersion) free(pVersion); if(szVersion) free(szVersion); // // lade die richtigen DLL's L_OK = OL_Dll_Load(Version); if( !L_OK ) { perror("Outlook Library's konnte nicht geladen werden.\n\n"); return (1); } } else { perror("Outlook ist nicht installiert.\n\n"); return (1); } // .......................... // weiterer code // .......................... if( L_OK ) { // DLL entladen fFreeLib = FreeLibrary(hinstLibMSO); fFreeLib = FreeLibrary(hinstLibOLB); } system("pause"); return (0); }
bool OL_Dll_Load(int Version) { BOOL fFreeLib; BOOL L_OK = TRUE; switch(Version) { case 12: // Outlook 2007 // DLL Datei laden // HKEY_CLASSES_ROOT\TypeLib\{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}\2.4\0\win32 hinstLibMSO = LoadLibrary(_T("C:\\Program Files (x86)\\Common Files\\Microsoft Shared\\OFFICE12\\mso.dll")); if(hinstLibMSO) { hinstLibOLB = LoadLibrary(_T("C:\\Program Files (x86)\\Microsoft Office\\OFFICE12\\msoutl.olb")); if(!hinstLibOLB) { fFreeLib = FreeLibrary(hinstLibMSO); L_OK = FALSE; } } else L_OK = FALSE; break; case 11: // Outlook 2003 // DLL Datei laden hinstLibMSO = LoadLibrary(_T("C:\\Program Files (x86)\\Common Files\\Microsoft Shared\\OFFICE11\\mso.dll")); if(hinstLibMSO) { hinstLibOLB = LoadLibrary(_T("C:\\Program Files (x86)\\Microsoft Office\\OFFICE11\\msoutl.olb")); if(!hinstLibOLB) { fFreeLib = FreeLibrary(hinstLibMSO); L_OK = FALSE; } } else L_OK = FALSE; break; case 10: // Outlook 2002 // DLL Datei laden hinstLibMSO = LoadLibrary(_T("C:\\Program Files (x86)\\Common Files\\Microsoft Shared\\OFFICE10\\mso.dll")); if(hinstLibMSO) { hinstLibOLB = LoadLibrary(_T("C:\\Program Files (x86)\\Microsoft Office\\OFFICE10\\msoutl.olb")); if(!hinstLibOLB) { fFreeLib = FreeLibrary(hinstLibMSO); L_OK = FALSE; } } else L_OK = FALSE; break; case 9: // Outlook 2000 und was ist mit der zweiten Zahl?? // DLL Datei laden hinstLibMSO = LoadLibrary(_T("C:\\Program Files (x86)\\Microsoft Office\\Office\\mso9.dll")); if(hinstLibMSO) { hinstLibOLB = LoadLibrary(_T("C:\\Program Files (x86)\\Microsoft Office\\Office\\msoutl9.olb")); if(!hinstLibOLB) { fFreeLib = FreeLibrary(hinstLibMSO); L_OK = FALSE; } } else L_OK = FALSE; break; default: L_OK = FALSE; break; } //using namespace Outlook; return L_OK; }
Ok soweit, wie kann man, im Unterschied zu
#if defined(OUTL12) // Outlook 2007 #import "C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE12\mso.dll" \ no_namespace named_guids,\ rename("DocumentProperties", "DocProps") \ rename("RGB", "_RGB") \ rename("FileTypes", "OutlookFileTypes") //exclude("IAccessible")
beim Laden während des Runtim die Argumente rename etc. setzen und
wie bekomme ich das namespace:using namespace Outlook;
hin?
-
Hab mich jetzt registriert..
und vergessen:[b]extern HINSTANCE hinstLibMSO, hinstLibOLB[/b]; int main() { // code wie oben }
und
[b]HINSTANCE hinstLibMSO, hinstLibOLB;[/b] bool OL_Dll_Load(int Version) { // code wie oben }