Функция с параметром PWideChar, принимающая только первый символ - PullRequest
4 голосов
/ 11 июня 2011

Я только что столкнулся со странной проблемой.Я пытаюсь загрузить модель в OpenGL и в той части, где я загружаю текстуры, я использую функцию auxDIBImageLoadA(dibfile:PWideChar).Вот мой код, называющий это

procedure CreateTexture(var textureArray: array of UINT; strFileName: string; textureID: integer);       // Vytvožení textury
var
  pBitmap: PTAUX_RGBImageRec;                                                   
begin
  if strFileName = '' then exit;                                                
  MessageBox(0,PWideChar(strFileName),nil,SW_SHOWNORMAL);
  pBitmap := auxDIBImageLoadA(PWideChar(strFileName));      
  if pBitmap = nil then exit;    
...

MessageBox просто для контроля.Вот что происходит: я запускаю приложение, появляется окно с "FACE.BMP".Хорошо.Но тогда я получаю сообщение об ошибке "Failed to open DIB file F".Когда я устанавливаю stFileName на xFACE.BMP, я получаю "Failed to open DIB file x".По какой-то причине кажется, что функция берет только первый символ.

Я что-то упустил?Я использую glaux.dll, который я скачал 5 раз из разных источников, поэтому он не должен содержать ошибок (надеюсь, каждый сайт OpenGL ссылался на него)

Ответы [ 2 ]

7 голосов
/ 11 июня 2011

Странно, функции, оканчивающиеся на «A», обычно принимают указатели PAnsiChar, а функции, оканчивающиеся на «W», - указатели PWideChar.Есть ли также auxDIBImageLoadW звонок?Если есть, то используйте этот или попробуйте PAnsiChar, поскольку передаваемый вами PWideChar (два байта на позицию) будет выглядеть как строка длиной в один символ, если она оценивается как 1-байтовая строка.

1 голос
/ 11 июня 2011

Вам необходимо преобразовать строку Unicode в ANSI. Сделай это так

pBitmap := auxDIBImageLoadA (PAnsiChar(AnsiString(strFileName)))

Вы бы лучше назвали версию Unicode, хотя

pBitmap := auxDIBImageLoadW (PWideChar(strFileName))
...