在 dll 中读取了一个相对路径文件:config.txt,由于 dll 是在 Windows/System32 下放置且注册的,于是想当然地以为 config.txt 也应该放在 System32 下面,这样 dll 就能找到它。然而在一些软件环境下调用这个 dll 时,有些正常,有些不正常,十分费解。经过反复排查,发现 dll 默认的本地路径是不确定的:
1)对于记事本,已经存在的文件,再次打开后,调用 dll 读取 System32/config.txt
2) 对于 Word(Office),新建文件,调用 dll 读取 System32/config.txt
3) 对于记事本,新建文件,调用 dll 读取 Users/XXX/config.txt
4)对于写字板,新建或已保存文件,调用 dll 不知道读的是哪里的文件,并且没有读到
所以结论是:不要在 dll 中使用相对路径。而要使用绝对路径 C:\\System32\\config.txt
另外发现,保存到 System32 和 SysWOW64 下面的两个 config.txt,实际上是一个,修改其中一个,另一个也变。但是你如果以为这两个文件实际是一个,那么我让 dll 去绝对路径 System32/config.txt 读取不就行了吗?你又错了,当你告诉一个放在 SysWOW64 下的 dll 去读System32/config.txt,它实际还是去读 SysWOW64/config.txt,如果发现没有,又要崩了。
所以,保险的做法是,两个地方都放一份。