2013-07-18 37 views
0

我想簡單的通過CreateDispatch調用創建一個OLE EXE服務器的實例,但顯然不是因爲我的當前目錄是不正確的故障工作時。我得到的錯誤是「服務器初始化失敗」。我調試了CreateDispatch的代碼,發現它有三件事。如何設置當前目錄中的OLE自動化服務器

  1. 的CoCreateInstance //在我的情況下,這個成功
  2. OleRun //這失敗在我的情況,錯誤 '服務器執行失敗'
  3. 的QueryInterface IDispatch的

我試圖啓動進程通過CreateProcess很好,但如果我不提供在其第八參數正確CurrentDirectory這顯然意味着,在我的情況CurrentDirectory是不正確的,我要提供它得到它的工作失敗。

我知道父母的CurrentDirectory是當父母試圖生成一個進程傳遞。所以,我試圖通過SetCurrentDirectory API調用將父母的CurrentDirectory更改爲合適的目錄。這在CreateProcess的情況下工作,但在CreateDispatch的情況下不起作用,給我同樣的錯誤,並在內部調用相同的OleRun失敗。

沒有任何人有任何想法我怎麼可以使用currentDirectory傳遞給CreateDispatch?還是有解決方法?

回答

0

如果你真的需要有當期的目錄設置爲你的應用程序目錄,那麼你建議立即進行刪除djust做THI罪你的程序的「主」。您可以使用GetModuleFileName執行此操作,然後使用splitpath來獲取目錄,並且可以撥打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); 
}