我几个月来一直在使用这个特殊的功能,但今天它已经停止工作了。我无法想象为什么,而且我什么都不排除,所以如果你有什么想法,请告诉我们!
我正在以这种方式加载函数:
[DllImport("kernel32")]
private static extern int GetPrivateProfilestring(string section, string key, string def, StringBuilder retVal, int size, string filePath);
然后我尝试以这种方式使用它:
StringBuilder temp = new StringBuilder(255);
int i = GetPrivateProfilestring(Section, Key, "", temp, 255, strPath);
return temp.ToString();
据说这种方法已经存在了很长时间,但是从现在起它就抛出了这个例外:
System.EntryPointNotFoundException:无法在DLL'kernel32'中找到名为'GetPrivateProfilestring'的入口点
为什么会这样? dll是否可能被更改(通过Windows更新或其他东西)?也许它再也找不到了,例外会不同吗?我知道这不太可能,因为我已经说过我没有任何理由,因为这一直有效并且源代码没有改变......
更新:奇怪的是,资本化有所帮助,它现在正在发挥作用。但是我仍然很好奇为什么会发生这种情况,为什么现在发生呢?我可以向你保证,它已经工作了好几个月了。
我有点害怕只是更改它并在任何地方更新我们的软件,因为错误只发生在我的机器上(据我所知),但旧的方法已经在各种PC和配置的生产中工作超过6个月。
答案 0 :(得分:4)
尝试GetPrivateProfileString
,使用大写字母S.
答案 1 :(得分:2)
名称GetPrivateProfileString是C ++中定义的GetPrivateProfileStringA(多字符版本)或GetPrivateProfileStringW(unicode版本)的别名。
此名称未在DLL中定义,因此您应使用DllImport的EntryPoint字段来提供函数的真实名称。使用C#中的Unicode版本。
[DllImport("kernel32", EntryPoint="GetPrivateProfileStringW")]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
答案 2 :(得分:0)
嗯...一些想法:
CharSet=CharSet.Unicode
,甚至可以使用GetPrivateProfileStringW指定Unicode版本。