0

我试图通过CreateDispatch调用简单地创建一个 OLE EXE 服务器的实例,但显然它失败了,因为我的当前目录不正确。我得到的错误是“服务器初始化失败”。我调试了CreateDispatch代码,发现它做了三件事。

  1. CoCreateInstance //在我的情况下,这成功了
  2. OleRun //这在我的情况下失败并出现错误“服务器执行失败”
  3. IDispatch 的查询接口

我也尝试启动该过程CreateProcess,但如果我没有CurrentDirectory在其第 8 个参数中提供正确的,它将失败,这显然意味着在我的情况下CurrentDirectory是不正确的,我必须提供它才能使其正常工作。

我知道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 回答