设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1159|回复: 2
打印 上一主题 下一主题

[已经解决] 这寻址问题是怎么回事?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
49
在线时间
177 小时
注册时间
2011-7-3
帖子
235
跳转到指定楼层
1
发表于 2013-9-21 11:04:15 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x


源代码:
RM部分:
module Kernal
  $LoadBMP = Win32API.new("0002.dll","LoadBMP","L","IIL")
  $LoadGLTextures = Win32API.new("0002.dll","LoadGLTextures","V","I")
  $ReSizeGLScene = Win32API.new("0002.dll","ReSizeGLScene","II","V")
  $InitGL = Win32API.new("0002.dll","InitGL","V","I")
  $DrawGLScene = Win32API.new("0002.dll","DrawGLScene","V","I")
end

class Scene_Base
  def main
    start
    Input.update
    loop do
      Graphics.update
      Input.update
      update
      break if $scene != self
    end
    Graphics.update
    Graphics.freeze
    terminate
  end
  def start
  end
  def perform_transition
    Graphics.transition(10)
  end
  def update
  end
  def terminate
  end
end


class Scene_1 < Scene_Base
  def start
    super
    $LoadBMP.call("help_05.bmp")
    $LoadGLTextures.call
    $ReSizeGLScene.call(640,480)
    $InitGL.call
  end
  def terminate
    super
  end
  def update
    super
    $DrawGLScene.call
  end
end

begin
  Graphics.freeze
  $scene = Scene1.new
  $scene.main while $scene != nil
  Graphics.transition(10)
  Graphics.resize_screen(640,480)
rescue Errno::ENOENT
  filename = $!.message.sub("沒有這樣的檔案或目錄——", "")
  print("無法找到檔案:#{filename}。")
end

VC++部分:
#include <windows.h>                // Header File For Windows
#include <stdio.h>                        // Header File For Standard Input/Output
#include <gl\gl.h>                        // Header File For The OpenGL32 Library
#include <gl\glu.h>                        // Header File For The GLu32 Library
#include <gl\glaux.h>                // Header File For The Glaux Library

HDC                        hDC=NULL;                // Private GDI Device Context
HGLRC                hRC=NULL;                // Permanent Rendering Context
HWND                hWnd=NULL;                // Holds Our Window Handle
HINSTANCE        hInstance;                // Holds The Instance Of The Application

bool        keys[256];                        // Array Used For The Keyboard Routine
bool        active=TRUE;                // Window Active Flag Set To TRUE By Default
bool        fullscreen=TRUE;        // Fullscreen Flag Set To Fullscreen Mode By Default

GLfloat        xrot;                                // X Rotation ( NEW )
GLfloat        yrot;                                // Y Rotation ( NEW )
GLfloat        zrot;                                // Z Rotation ( NEW )

GLuint        texture[1];                        // Storage For One Texture ( NEW )

AUX_RGBImageRec *LoadBMP(char *Filename)                                // Loads A Bitmap Image
{
        FILE *File=NULL;                                                                        // File Handle

        if (!Filename)                                                                                // Make Sure A Filename Was Given
        {
                return NULL;                                                                        // If Not Return NULL
        }

        File=fopen(Filename,"r");                                                        // Check To See If The File Exists

        if (File)                                                                                        // Does The File Exist?
        {
                fclose(File);                                                                        // Close The Handle
                return auxDIBImageLoad(Filename);                                // Load The Bitmap And Return A Pointer
        }

        return NULL;                                                                                // If Load Failed Return NULL
}

int LoadGLTextures()                                                                        // Load Bitmaps And Convert To Textures
{
        int Status=FALSE;                                                                        // Status Indicator

        AUX_RGBImageRec *TextureImage[1];                                        // Create Storage Space For The Texture

        memset(TextureImage,0,sizeof(void *)*1);                   // Set The Pointer To NULL

        // Load The Bitmap, Check For Errors, If Bitmap's Not Found Quit
        if (TextureImage[0]=LoadBMP("Graphics/help_05.bmp"))
        {
                Status=TRUE;                                                                        // Set The Status To TRUE

                glGenTextures(1, &texture[0]);                                        // Create The Texture

                // Typical Texture Generation Using Data From The Bitmap
                glBindTexture(GL_TEXTURE_2D, texture[0]);
                glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
                glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
                glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
        }

        if (TextureImage[0])                                                                        // If Texture Exists
        {
                if (TextureImage[0]->data)                                                        // If Texture Image Exists
                {
                        free(TextureImage[0]->data);                                        // Free The Texture Image Memory
                }

                free(TextureImage[0]);                                                                // Free The Image Structure
        }

        return Status;                                                                                // Return The Status
}

GLvoid ReSizeGLScene(GLsizei width, GLsizei height)                // Resize And Initialize The GL Window
{
        if (height==0)                                                                                // Prevent A Divide By Zero By
        {
                height=1;                                                                                // Making Height Equal One
        }

        glViewport(0,0,width,height);                                                // Reset The Current Viewport

        glMatrixMode(GL_PROJECTION);                                                // Select The Projection Matrix
        glLoadIdentity();                                                                        // Reset The Projection Matrix

        // Calculate The Aspect Ratio Of The Window
        gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);

        glMatrixMode(GL_MODELVIEW);                                                        // Select The Modelview Matrix
        glLoadIdentity();                                                                        // Reset The Modelview Matrix
}

int InitGL(GLvoid)                                                                                // All Setup For OpenGL Goes Here
{
        if (!LoadGLTextures())                                                                // Jump To Texture Loading Routine ( NEW )
        {
                return FALSE;                                                                        // If Texture Didn't Load Return FALSE
        }

        glEnable(GL_TEXTURE_2D);                                                        // Enable Texture Mapping ( NEW )
        glShadeModel(GL_SMOOTH);                                                        // Enable Smooth Shading
        glClearColor(0.0f, 0.0f, 0.0f, 0.5f);                                // Black Background
        glClearDepth(1.0f);                                                                        // Depth Buffer Setup
        glEnable(GL_DEPTH_TEST);                                                        // Enables Depth Testing
        glDepthFunc(GL_LEQUAL);                                                                // The Type Of Depth Testing To Do
        glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);        // Really Nice Perspective Calculations
        return TRUE;                                                                                // Initialization Went OK
}

int DrawGLScene(GLvoid)                                                                        // Here's Where We Do All The Drawing
{
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);        // Clear The Screen And The Depth Buffer
        glLoadIdentity();                                                                        // Reset The View
        glTranslatef(0.0f,0.0f,-5.0f);

        glRotatef(xrot,1.0f,0.0f,0.0f);
        glRotatef(yrot,0.0f,1.0f,0.0f);
        glRotatef(zrot,0.0f,0.0f,1.0f);

        glBindTexture(GL_TEXTURE_2D, texture[0]);

        glBegin(GL_QUADS);
                // Front Face
                glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);
                glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);
                glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f);
                glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f);
                // Back Face
                glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
                glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);
                glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);
                glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
                // Top Face
                glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);
                glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,  1.0f,  1.0f);
                glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,  1.0f,  1.0f);
                glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);
                // Bottom Face
                glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
                glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
                glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);
                glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);
                // Right face
                glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
                glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f);
                glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f);
                glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f);
                // Left Face
                glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
                glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f);
                glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f);
                glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f);
        glEnd();

        xrot+=0.0f;
        yrot+=1.0f;
        zrot+=0.0f;
        return TRUE;                                                                                // Keep Going
}

Lv2.观梦者

狂気の月兔

梦石
0
星屑
276
在线时间
1245 小时
注册时间
2009-4-7
帖子
879

贵宾

2
发表于 2013-9-21 13:14:00 | 只看该作者
本帖最后由 铃仙·优昙华院·因幡 于 2013-9-21 13:17 编辑

如果 LoadBMP 这个函数是自己写的, 那么就请改个名字试试, 估计是和系统库里的函数同名了.

如果不是自己写的, 调用的是系统库的 LoadBMP 的话, 请在声明的时候附加声明使用的字符类型, LoadBMPA 或者 LoadBMPW .

如果都不是的话, 请检查 Dll 的输出表, 看看是不是有存在名字改编的问题, 如果你没有定义 Def 文件的话, 估计多半是这个问题.

评分

参与人数 1星屑 +100 收起 理由
怪蜀黍 + 100 精品文章

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
75
在线时间
37 小时
注册时间
2013-7-15
帖子
19
3
发表于 2013-9-21 14:37:29 | 只看该作者
用dll函数查看器能看到函数名……我用vc++写的dll都是函数名后面带有一串@的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-20 01:22

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表