1

私はこの特定の機能を何ヶ月も使用していますが、今日は機能しなくなりました。理由は想像できませんし、否定するつもりもありません。何かアイデアがあれば教えてください。

私はそのような方法で関数をロードしています:

[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 Updateなどによって)?もう見つからないだけかもしれませんが、その場合、例外は異なりますか? これはありそうもないことですが、これは常に機能しており、ソースコードは変更されていないため、何も排除しないと言ったように...

更新: 奇妙なことに、大文字化が役に立ちましたが、現在は機能しているようです。しかし、なぜこれが起こったのか、そしてなぜ今起こったのか、私はまだ興味がありますか? 私はそれが今何ヶ月も働いたことを保証することができます.

エラーは私のマシンでのみ発生したため(とにかく私が知る限り)、それを変更してソフトウェアをどこでも更新することを少し恐れていますが、古い方法はさまざまな PC と構成で 6 か月以上にわたって運用されています。 .

4

3 に答える 3

4

GetPrivateProfileString代わりに、大文字の S を試してください。

于 2009-12-22T09:53:31.880 に答える
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);
于 2009-12-22T09:57:44.190 に答える
0

うーん...いくつかの考え:

  • プロセスの環境パスが最近変更され、kernel32 が存在しなくなった可能性がありますか?
  • インポートで大文字と小文字が区別されるとは思いませんが、大文字と小文字が MSDN と一致しません (最後の「文字列」は大文字です)。
  • ANSI/Unicode の問題である可能性があります (ANSI の問題がなくなったように?)- CharSet=CharSet.UnicodeDllImport 属性で指定するか、GetPrivateProfileStringW で Unicode バージョンを正確に指定することもできます。
于 2009-12-22T09:54:42.230 に答える