VC++ 2008、CLR コンソール アプリ、win7 x64 で開発中。
私は MS Office v.12 PIA で .net を使用して Excel の自動化を行っていますが、これは非常にうまくいっています。しかし今、単純な電子メール トランザクションを実行するコードの次の部分を開始しているので、コードで MAPI を動作させようとしています。基本的に、適切なレジストリ キーを読み取って OLMAPI32.DLL ファイルへのフル パスを取得し、その dll 内から LoadLibrary/GetProcAddress を試みます。
ここにスニペットがあります:
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 に移動し、[アクティブなソリューション プラットフォーム] で、[Win32]、[新規]、および [編集] のみを選択します。そこで、[新規] をクリックし、[新しいプラットフォームを入力または選択] の下に「x86」と入力し、[設定のコピー元] をクリックして [任意の CPU] または適切なものを選択しますが、私の唯一の選択肢は Win32 です。すでに .net をターゲットにしていたためかもしれないと考えたので、その理論をテストするために、今回は Win32 コンソール アプリとして新しいプロジェクトを開始しました。そのタイプのプロジェクトでも、私の唯一の選択肢は Win32 です。私が聞いた x86、x64、Any CPU、および Itanium は、私の VS2008 には存在しません!
だから私はここで途方に暮れています。mapi インターフェイスを使用できるように、VS に exe を x86 としてコンパイルさせるにはどうすればよいですか? または、使用できる OLMAPI32.DLL の 64 ビット バージョンはありますか? MAPI 用の 64 ビット ライブラリがなく、x86 用に環境をセットアップしようとすると VS がヘッドライトを提供する場合、コードで MAPI を動作させるにはどうすればよいでしょうか。私の 64 ビット環境が自動的に MAPI の使用資格を失うとは信じられません。
ありがとう