我用VC写了一个DLL,然后用OCX把这个DLL进行封装.在DLL里我写了个函数用来获取当前程序所在的目录:string getExeFileDir()
{
CHAR szFullPath[2048] = { 0 };

CHAR driver[MAX_PATH] = { 0 };
CHAR dir[MAX_PATH] = { 0 };
CHAR fname[MAX_PATH] = { 0 };
CHAR ext[MAX_PATH] = { 0 };
CHAR fullbuf[MAX_PATH] = { 0 }; GetModuleFileName(NULL, fullbuf, MAX_PATH);

// _splitpath(_pgmptr , driver , dir , fname , ext ); _makepath(szFullPath , driver , dir , NULL ,NULL) ;

string ret = szFullPath; ret += "\\";

return ret;
}
在调用OCX的时候,OCX就调用了DLL, DLL里调用了这个自己写的函数,获取到的结果非常奇怪.结果是这样的,中间竟然包括了一个 or :
 
c:\test\sample\bin\ or VB\bin\debug\导致我在DLL里创建文件失败..
到底要怎么才能正确获取当前EXE所在的目录?

解决方案 »

  1.   

    GetCurrentDirectory 不安全,很多时候,如果其他软件调用了setcurrentdirectory
    那么用GetCurrentDirectory就获取的是他设置的那个目录
      

  2.   

    #include <windows.h>
    #include <Shlwapi.h> // Import Library: Shlwapi.lib...
    {
        TCHAR szPath[MAX_PATH];
        GetModuleFileName (NULL, szPath, MAX_PATH);
        PathRemoveFileSpec (szPath);
        return szPath;
    }
      

  3.   

    除非你自己的程序去SetCurrentDirectory,它只能改当前进程的当前目录
    也可以试试
    _get_pgmptr