在MS的MSDN上,对于GetModuleFileName输出的文件名有一些解释。
The string returned will use the same format that was specified when the module was loaded. Therefore, the path can be a long or short file name, and can use the prefix " //?/". For more information, see Naming a File.
如果没有正确的理解这个东西,我们在写程序的时候就可能会出错。
由于现在很多的程序对资源文件命名的时候,都是采用EXE名字后面加上一些修饰来完成,如加Res或是采用当前语言的ID,如果你的程序在被调用起来的时候,是采用DOS路径的方式调用,那么GetModuleFileName返回的也是一个短路径,加上现在一般EXE的名字都会大于8个,如果直接把EXE名字加上Res或当前语言的ID,LoadLibrary就会失败,因为LoadLibrary没有办法找到文件。
正确的处理方法是在GetModuleFileName返回的文件名,再次调用GetLongPathName函数转化成长文件名就可以处理正确了。
仔细分析所出现的问题,主要还是自己平时在查找相关函数的时候,没有仔细的去看一些MSDN的注意事项。
The string returned will use the same format that was specified when the module was loaded. Therefore, the path can be a long or short file name, and can use the prefix " //?/". For more information, see Naming a File.
如果没有正确的理解这个东西,我们在写程序的时候就可能会出错。
由于现在很多的程序对资源文件命名的时候,都是采用EXE名字后面加上一些修饰来完成,如加Res或是采用当前语言的ID,如果你的程序在被调用起来的时候,是采用DOS路径的方式调用,那么GetModuleFileName返回的也是一个短路径,加上现在一般EXE的名字都会大于8个,如果直接把EXE名字加上Res或当前语言的ID,LoadLibrary就会失败,因为LoadLibrary没有办法找到文件。
正确的处理方法是在GetModuleFileName返回的文件名,再次调用GetLongPathName函数转化成长文件名就可以处理正确了。
仔细分析所出现的问题,主要还是自己平时在查找相关函数的时候,没有仔细的去看一些MSDN的注意事项。