문제

나는 .NET의 Kernel32에서 GetPrivateProfilestring 및 GetPrivateProfilesection을 호출하는 데 땜질을했으며 이해하지 못하는 이상한 것을 발견했습니다.

이 ancantation부터 시작합시다.

    Private Declare Unicode Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringW" ( _
    ByVal lpApplicationName As String, _
    ByVal lpKeyName As String, _
    ByVal lpDefault As String, _
    ByVal lpReturnedString() As Char, _
    ByVal nSize As Int32, _
    ByVal lpFileName As String) As Int32

lpepplicationName (섹션), lpkeyname 및 lpdefault가 없으면 해당 섹션의 모든 키를 가져와야하며 실제로 50%의 시간을 가져와야합니다.

INI 파일에 첫 번째 줄에서 시작하는 lpapplicationName이있는 경우 버퍼는 아무것도 반환하지 않습니다. 파일의 두 번째 줄에 lpapplicationName 통계가 있으면 예상 값을 반환합니다.

처음에는 선언에서 W 버전과 유니 코드를 사용하는 것이 문제 였지만, 변경하는 것은 효과가없는 것 같습니다.

내가 무엇을 놓치고 있습니까?

도움이 되었습니까?

해결책

열린 파일에 바이트 주문 마크 (텍스트 인코딩 유형을 표시하는 몇 바이트).

이 Windows API 호출은 바이트 주문 마크를 잡는 것처럼 보이지 않으며 첫 번째 섹션을 놓치게됩니다 (따라서 빈 줄이 있으면 모든 것이 잘 작동합니다).

다른 팁

좋은 전화. VS.NET에서 INI 파일을 편집하는 것은 물론 UTF-8 BOM을 추가하는 것입니다. grrr. 메모장으로 열고 Saveas ASCII를 수행하면 예상 결과가 생성됩니다.

너무 분명합니다. 그래서 둔각. 크래퍼 아래로 또 한 시간. :-)

감사! -= Chris

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top