我刚遇到一个奇怪的问题。我正在尝试将模型加载到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网站都提到它)。
答案 0 :(得分:7)
奇怪的是,以“A”结尾的函数通常采用PAnsiChar指针,而以“W”结尾的函数采用PWideChar指针。是否还有auxDIBImageLoadW
电话?如果有使用那个,或尝试使用PAnsiChar,因为你传递的PWideChar(每个位置两个字节)如果被评估为1字节字符串,则看起来像一个字符串长一个字符。
答案 1 :(得分:1)
您需要将Unicode字符串转换为ANSI。这样做
pBitmap := auxDIBImageLoadA (PAnsiChar(AnsiString(strFileName)))
你最好不要再调用Unicode版本
pBitmap := auxDIBImageLoadW (PWideChar(strFileName))