首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试从DllImport从kernel32获取异常

尝试从DllImport从kernel32获取异常
EN

Stack Overflow用户
提问于 2009-12-22 09:48:53
回答 3查看 1.8K关注 0票数 1

我已经使用这个特殊的功能几个月了,但是今天它停止工作了。我无法想象为什么,我什么也不排除,所以如果你有任何想法,请告诉我!

我正在以这样的方式加载功能:

代码语言:javascript
复制
[DllImport("kernel32")]
private static extern int GetPrivateProfilestring(string section, string key, string def, StringBuilder retVal, int size, string filePath);

然后我试着用这个方法:

代码语言:javascript
复制
StringBuilder temp = new StringBuilder(255);

int i = GetPrivateProfilestring(Section, Key, "", temp, 255, strPath);
return temp.ToString();

如前所述,这已经持续了很长时间,但从现在开始,它抛出了这个异常:

System.EntryPointNotFoundException:无法在DLL 'kernel32‘中找到名为“GetPrivateProfilestring”的入口点

为什么会发生这种事?是否有可能(通过windows更新或其他方式)更改了dll?也许它再也找不到了,那么例外情况会有所不同吗?我知道这是不可能的,然而,正如我说的,我不排除任何可能,因为这一直是有效的,源代码没有被改变……

Update:奇怪的是,大写帮助了它,它现在已经开始工作了。然而,我仍然好奇为什么会发生这种情况,为什么现在会发生这种情况?我可以向你保证,它已经用了好几个月了。

我有点害怕只是改变它和更新我们的软件到处,因为错误只发生在我的机器上(据我所知无论如何),但是旧的方法已经在不同的PC和配置上工作了6个多月。

EN

回答 3

Stack Overflow用户

发布于 2009-12-22 09:53:31

试试GetPrivateProfileString吧,用大写字母S。

票数 4
EN

Stack Overflow用户

发布于 2009-12-22 09:57:44

名称GetPrivateProfileString是在C++中定义的GetPrivateProfileStringA (多字符版本)或GetPrivateProfileStringW (unicode版本)的别名。

这个名称在DLL中没有定义,所以您应该使用EntryPoint字段DllImport来给出函数的真实名称。使用来自C#的Unicode版本。

代码语言:javascript
复制
[DllImport("kernel32", EntryPoint="GetPrivateProfileStringW")]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
票数 2
EN

Stack Overflow用户

发布于 2009-12-22 09:54:42

嗯..。几点想法:

capitalized).

  • Could

  • 最近更改了进程的环境路径,kernel32可能不再在它上了?

  • --我不认为导入是区分大小写的,但是大小写不匹配(最后的'string‘是ANSI/Unicode问题(就像ANSI已经消失了一样?)--您可以尝试在DllImport属性上指定CharSet=CharSet.Unicode,甚至可以使用GetPrivateProfileStringW.

指定Unicode版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1945288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档