0

呼び出しで OLE EXE サーバーのインスタンスを単純に作成しようとしてCreateDispatchいますが、現在のディレクトリが正しくないために失敗したようです。表示されるエラーは「サーバーの初期化に失敗しました」です。コードをデバッグしたところ、CreateDispatchコードが 3 つのことを行っていることがわかりました。

  1. CoCreateInstance //私の場合、これは成功します
  2. OleRun //私の場合、これは「サーバーの実行に失敗しました」というエラーで失敗します
  3. IDispatch の QueryInterface

私もプロセスを起動しようとしましたが、8番目の引数でCreateProcess正しいものを提供しないと失敗します。CurrentDirectoryCurrentDirectory

CurrentDirectory親がプロセスを生成しようとしているときに、親のものが渡されることを私は知っています。そこで、 API呼び出しで親CurrentDirectoryを適切なディレクトリに変更してみました。SetCurrentDirectoryこれは、同じエラーが発生し、内部で同じ呼び出しに失敗したCreateProcess場合には機能しますが、機能しません。CreateDispatchOleRun

CurrentDirectory を に渡す方法を知っている人はいますCreateDispatchか? または回避策はありますか?

4

1 に答える 1

0

現在のディレクトリをアプリケーションディレクトリに設定する必要がある場合は、プログラムの「メイン」でこれを行う必要があります。これを で実行しGetModuleFileName、 を使用splitpathしてディレクトリと tehn call を取得できますSetCurrentDirectory

#include <windows.h>
#include <stdio.h>
#include <tchar.h>

int _tmain()
{
    TCHAR szDrive[_MAX_DRIVE];
    TCHAR szPath[_MAX_PATH];
    TCHAR szName[_MAX_FNAME];
    TCHAR szExt[_MAX_EXT];
    TCHAR szModName[MAX_PATH];
    GetModuleFileName(NULL, szModName, MAX_PATH);
    _tsplitpath(szModName, szDrive, szPath, szName, szExt);

    TCHAR szAppDir[MAX_PATH];
    _tcscpy_s(szAppDir, szDrive);
    _tcscat_s(szAppDir, szPath);
    SetCurrentDirectory(szAppDir);
    _tprintf(szAppDir);
}
于 2013-07-18T06:57:12.343 に答える