PWideChar参数的功能仅取第一个char

时间:2011-06-11 10:23:45

标签: string delphi opengl pointers char

我刚遇到一个奇怪的问题。我正在尝试将模型加载到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 个答案:

答案 0 :(得分:7)

奇怪的是,以“A”结尾的函数通常采用PAnsiChar指针,而以“W”结尾的函数采用PWideChar指针。是否还有auxDIBImageLoadW电话?如果有使用那个,或尝试使用PAnsiChar,因为你传递的PWideChar(每个位置两个字节)如果被评估为1字节字符串,则看起来像一个字符串长一个字符。

答案 1 :(得分:1)

您需要将Unicode字符串转换为ANSI。这样做

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

你最好不要再调用Unicode版本

pBitmap := auxDIBImageLoadW (PWideChar(strFileName))