一个用.net写的EXE程序在XP下能成功调用C++写的DLL,那个dll放在system32下。
  后来程序放到Windows server 2003下运行,就是不能调用,把所有权限的地方都设置成了EVERYONE还是不能调用。
  问题和这个一样,但是这个问题后来也没有什么明确的答案,大家帮帮忙,谢谢!

解决方案 »

  1.   

    楼主请先确定几点:
    1、C++的Dll是个什么Dll(COM,Win32 Dll,ActiveX Dll)
    2、PInvoke和权限无关,但和路径相关,你必须确保.NET PInvoke没有Hard code指定路径
    3、PInvoke不能成功调用有两个结果:不能调用,一运行到调用就抛出FileNotFoundException;能运行,返回值错误或得到其他异常。
    4、确定C++的Dll和系统平台无关根据LZ的描述,不能推导出具体为什么,写的太笼统,贴些代码看看吧
      

  2.   

    回答lalac
    1.dll为另一方提供的,所以没有dll的代码,应该是一个win32 dll
    2.你的问题我不太明白,你指在c#调用这里有没有写死路径?C#这里用的是DLLImport没有写完全路径,就给出了dll的名字。
    3.函数能够运行,但是返回了错误代码,那个错误代码表示没有找到文件,情况时这样的,C#调用C++的dll,C++的程序读取
      他本身所在目录下的一些文件,现在C++dll放在System32下面,那些文件放在System32\FileXX\下,在xp下运行完全正
      常,但是server 2003下调用函数会返回错误代码表示文件没有找到,可能是找不到那些C++dll要用的文件。
      

  3.   

    问题和这个一模一样,但是这个帖子最后也没有解决,大家帮忙看看啊
    http://www.80diy.com/home/20040910/04/3358096.html
      

  4.   

    LZ试试把Dll所在目录添加到系统PATH里:set PATH = %PATH%;%windir%\System32\FileXX\;
      

  5.   

    情况时这样的,C#调用C++的dll,C++的程序读取他本身所在目录下的一些文件,现在C++dll放在System32下面,那些文件放在System32\FileXX\下,在xp下运行完全正常,但是server 2003下调用函数会返回错误代码表示文件没有找到,可能是找不到那些C++dll要用的文件。从这里判断,PInvoke调用没有问题,C++ Dll内部读写文件出错了
      

  6.   

    加系统path的方法刚刚试验过了,还是不行
      

  7.   

    这两天试验下来有个新发现就是如果在命令行里运行这个程序的话,程序和他用的那个文件夹必须在当前路径下
    比如命令行里显示C:\>的话那些文件就都要在C:\下,后面你指定路径也没用,比如C:\>C:\Windows\System32\..
    是没用的,不知道这个算不算一个线索。