VC ++ 2008, консольное приложение CLR, разрабатываемое под win7 x64.
Я использую .net с MS Office v.12 PIA для автоматизации Excel, которая идет довольно неплохо. Но теперь я начинаю следующую часть кода, которая включает в себя выполнение некоторых простых транзакций электронной почты, поэтому я пытаюсь заставить MAPI работать в моем коде. По сути, он читает соответствующий раздел реестра, чтобы получить полный путь к файлу OLMAPI32.DLL, а затем пытается загрузить LoadLibrary / GetProcAddress из этой библиотеки DLL.
Вот фрагмент:
using namespace System;
using namespace Microsoft::Office::Interop;
using namespace Microsoft::Win32;
int main(array<System::String ^> ^args)
{
RegistryKey^ subK = Registry::LocalMachine->OpenSubKey("SOFTWARE\\Clients\\Mail\\Microsoft Outlook");
String^ mailDll = safe_cast<String^>(subK->GetValue("DLLPathEx"));
CStringW cStrMailDll = mailDll; //Just to put mailDll in a format that LoadLibrary() can read.
LPMAPIINITIALIZE mapiInit = NULL;
HMODULE mapiLib = LoadLibrary(cStrMailDll); // This Returns NULL
if(mapiLib == NULL)
{
printf("\nError: %d\n", GetLastError()); // System Error 193 - ERROR_BAD_EXE_FORMAT
return 1;
}
...(more code)
...
Меня не шокирует, что LoadLibrary устанавливает системную ошибку 193: «% 1 не является допустимым приложением Win32». Проведя некоторые исследования, я решил, что все, что мне нужно сделать, это принудительно скомпилировать x86. Поэтому я перехожу к Configuration Manager и на платформе Active Solution я выбираю только Win32, New и Edit. Поэтому я нажимаю «Создать», введите «x86» в разделе «Введите или выберите новую платформу» и нажмите «Копировать настройки из», чтобы выбрать «Любой процессор» или что-то подходящее, но мой единственный выбор - Win32, и! Я подумал, может быть, это потому, что я уже нацеливался на .net, поэтому, чтобы проверить эту теорию, я начал новый проект, на этот раз как консольное приложение Win32. Даже при таком типе проектов мой единственный выбор - Win32. X86, x64, любой процессор и Itanium, о которых я слышал, не существуют в моем VS2008!
Так что я в растерянности. Как заставить VS скомпилировать мой exe-файл как x86, чтобы я мог использовать интерфейс mapi? Или я могу использовать 64-разрядную версию OLMAPI32.DLL? Как, черт возьми, я могу заставить MAPI работать в моем коде, если для него нет 64-битной библиотеки и VS дает мне дорогой свет, когда я пытаюсь настроить свою среду для x86? Я просто не могу поверить, что моя 64-битная среда автоматически лишает меня права использовать MAPI.
Спасибо