如何在 Delphi XE中轻松地用freeglut.dll替换glut32.dll库(程序突然停止)

b4wnujal  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(147)

我有以下问题。我正在使用Glut openGL在我用 Delphi 编写的应用程序中绘制某些元素。我正在使用的库文件名为glut32.dll(放在EXE文件所在的位置)现在我决定用64位编译我的应用程序,因为它使用的其他库将只更新为64位。但是有一件事阻止了我,那就是glut32.dll(它是32位的)。由于Glut项目已经多年不被支持了,我找到了*freeglut*替代方案,它声称是原始Glut的替代品:https://freeglut.sourceforge.net/,并从以下位置下载了freeglut.dllwww.transmissionzero.co.uk/software/freeglut-devel/(用于MSVC)。
当我查看**.h**头文件时,它似乎与 *.pas文件中的代码翻译或多或少相同。因此,我尝试只加载 freeglut.dll 而不是 glut32.dlldll 在下面的函数中设置为正确的dll名称)

procedure LoadGlut(const dll: String);
    begin
    
      FreeGlut;
    
      hDLL := LoadLibrary(PChar(dll));
      if hDLL = 0 then raise Exception.Create('Could not load Glut from ' + dll);
    
      @glutInit := GetProcAddress(hDLL, 'glutInit');
      @glutInitDisplayMode := GetProcAddress(hDLL, 'glutInitDisplayMode');
      @glutCreateWindow := GetProcAddress(hDLL, 'glutCreateWindow');
      @glutCreateSubWindow := GetProcAddress(hDLL, 'glutCreateSubWindow');
      @glutDestroyWindow := GetProcAddress(hDLL, 'glutDestroyWindow');
      @glutPostRedisplay := GetProcAddress(hDLL, 'glutPostRedisplay');
      ...

它加载时没有任何错误等,其中的过程也是如此,但当应用程序启动并到达使用这些函数之一的点时,它只是停止调试器,没有任何错误消息(如按Ctrl+F2)。

procedure DrawArrow(P1, P2: TRPoint; Color: TRGBAColor);
    var
      R : Real;
    begin
      DrawLine(P1, P2, Color);
      glColor4fv(@Color[0]);
      glPushMatrix;
        SetZAxis(P2, P1);
        R := VectorModulus(VectorDifference(P1,P2));
        glTranslated(0, 0, R);
        SetSymbolScale;
          glTranslated(0, 0, -ARROW_L);
          glutSolidCone(ARROW_W/2, ARROW_L, SOLID_SLICES, SOLID_STACKS);
        glPopMatrix;
      glPopMatrix;
    end;

调试器在glutSolidCone(箭头_W/2、箭头_L、实体切片、实体堆栈)处关闭自身;此函数也在freeglut中定义。

**EDIT:**如果我调用其他简单的函数,如 glutInitDisplayMode,它不会停止,因此看起来库被正确加载。但它仍然在 glutSolidCone 或其他绘图函数处关闭。

我没有使用这些头文件和 dll 的经验,但是我的 Delphi 代码在这种情况下应该是一个很好的翻译?或者不是?我不知道如何调试它。什么是调整我的代码以适应freeglut的方法。我认为应该是一些小东西,因为大多数东西应该是一样的。
谢谢你的帮助

smdnsysy

smdnsysy1#

看起来仅仅用freeglut.dll.替换 . glut32.dll并不能很好地完成工作,因为我猜里面的函数会有一点不同(或者简单地重命名 freeglut.dll --〉glut32.dll 也会失败)。NVIDIA Cg Toolkit
从2013年开始就不支持它了,但是安装后它会带来
dll
版本的 * glut 32 ,用于32位和64位开发。快速尝试一下,它似乎可以工作,并且覆盖了我在Glut.pas中的定义。
因此,如果您需要
glut32.dll***的64位版本和替换版本,可以从那里下载。
同时,如果有人将freeglut头文件(.h)转换为 Delphi 代码,这将是伟大的,因为在结束时,Freeglut 项目仍然保持,更新,并添加一些更有用的功能,除了原来的Glut。这种转换仍然超出了我的知识。

相关问题