在同一个目录下有一个exe,一个dll,和一个ini文件,比如
GetPrivateProfileStri("Selection","m_radio",NULL,letter,256,".\\Selection.ini")为什么exe可以读取ini内容,而dll不可以读取ini内容?ps:不能用ini的绝对路径,因为每部电脑的路径都不一样

解决方案 »

  1.   

    ps:不能用ini的绝对路径,因为每部电脑的路径都不一样
    ==你这个概念就不对了。正是因为在各个电脑上路径不一样,才需要用绝对路径啊。如果用相对,你怎么知道如何相对呢?既然路径是变化的,你应该将该文件的路径作为参数传进来,有外部来定这个文件的位置。
      

  2.   

    你那个调用这个dll的exe程序的当前目录下有Selection.ini这个文件
      

  3.   

    .\Selection.ini这个是相对于CurrentDirectory的路径吧
    而CurrentDirectory并不等同于exe的执行路径,正如cmd中的,CurrentDirectory是可以改的
    所以,你要的并不是这样的相对路径,而是应该使用exe执行文件的路径来拼接这个配置文件的路径
      

  4.   

    你那个调用这个dll的exe程序的当前目录下有Selection.ini这个文件吗?
    当然前提是你没有修改当前目录
      

  5.   

    本来着三个文件都是放在temp通一个文件夹里的,本来用GetTempPath()取得ini的绝对路径,但着样会牵涉到另外一个问题请看一下内容,http://topic.csdn.net/u/20080523/14/f36c8a7f-e1c8-4283-86d2-f5108f76599a.html所以只好用上面的方法做,但不知道为什么不成功
      

  6.   

    to stonewater 
    三个文件都放在同一个目录下
      

  7.   

    执行的时候,dll,exe,ini文件放在同一个目录下,或者ini放在windows目录下,再或者ini在path指定的目录下
      

  8.   

    其实呢,主要是你想在dll里面得到ini的路径对马? 
    AFX_MANAGE_STATE(AfxGetStaticModuleState()); //前面要加这个了,否则呢得到的就是调用dll的exe的路径了,对吧
    Length = GetModuleFileName(AfxGetApp()->m_hInstance, CurrentPath, _MAX_PATH);
    看看这篇文章了,呵呵!
    http://blog.csdn.net/na_he/archive/2008/05/07/2408655.aspx.
    希望是我说得那么回事了,呵呵!  
      

  9.   

    to stonewater 
    能否留下你的邮箱,我发给你看看,如果这个问题解决了,另外开贴以100分相谢
      

  10.   

    用GetModuleFileName(HMODULE hModule,LPTSTR lpFilename,DWORD nSize)获取的是带文件名的路径,去掉文件名,GetPrivateProfileStri最后一个参数用这个路径加上ini文件名,我在dll中这么做的都没什么问题
      

  11.   

    to watersoft 
    我也曾经用过GetModuleFileName(),但是出现跟我以前遇到的问题是一样的
    http://topic.csdn.net/u/20080523/14/f36c8a7f-e1c8-4283-86d2-f5108f76599a.html