代码:
CFile csf;
CFileException e;
if(!csf.Open(filepath, CFile::modeRead | CFile::typeBinary, &e))
……
filepath指向的一个硬盘文件,这个硬盘文件是当前进程运行需要的一个dll文件,绝大多数情况下能够正常返回,但是某些时候函数会返回错误,得到CFileException::11或者LastError 32,察看错误码的意思是:文件被独占无法打开,但是基本上只有当前进程运行才会占用此dll文件,难道当前进程的权限允许运行该dll却不允许在当前进程中open这个硬盘文件吗?
如果这个情况完全不可以,那为什么绝大多数客户机器上面这个open调用都能成功返回,某些客户机器上面又不能返回呢?特别的例子是有一个win98SE操作系统的客户机上面不能正确返回
请高手为我详细解释一下,谢谢
CFile csf;
CFileException e;
if(!csf.Open(filepath, CFile::modeRead | CFile::typeBinary, &e))
……
filepath指向的一个硬盘文件,这个硬盘文件是当前进程运行需要的一个dll文件,绝大多数情况下能够正常返回,但是某些时候函数会返回错误,得到CFileException::11或者LastError 32,察看错误码的意思是:文件被独占无法打开,但是基本上只有当前进程运行才会占用此dll文件,难道当前进程的权限允许运行该dll却不允许在当前进程中open这个硬盘文件吗?
如果这个情况完全不可以,那为什么绝大多数客户机器上面这个open调用都能成功返回,某些客户机器上面又不能返回呢?特别的例子是有一个win98SE操作系统的客户机上面不能正确返回
请高手为我详细解释一下,谢谢
?
仔细检查这个dll是否有别的进程需要使用这个从程序上讲是不可能的,但是根据pkrobbie(pkrobbie):“还有一种可能是某些低劣的杀毒软件在搞鬼。”的猜测,既有可能是低劣的杀毒软件也有可能是低劣的病毒:)在搞鬼,因为客户声称他的机器上面没有任何杀毒软件。不过我认为无论如何当前进程都已经成功运行也就是Load此dll文件进入了进程空间以后,当前进程至少应该有办法用只读方式打开这个文件,这种看法正确否?Albert_1030() ,当前进程显然要load这个dll才能正确启动运行,不过已经load的dll文件不能用只读打开?或者各位大虾根据我这个情况,提供一个读取该dll文件数据的其他方案?用内存文件映射可以吗?内存文件映射以后文件的内容是否——完全——和硬盘文件一致?最后一点是我最需要的