HitmaeN's profileGameDevErBlogListsNetwork Tools Help

GameDevEr

关注游戏开发相关内容
5/21/2007

调用动态加载的DLL中的重载函数

看书时发现书中没有这方面的讲解,于是自己动手试验了一下,不知道这样做是否“正点”,欢迎讨论。

关于DLL最基本的知识就不提了,开门见山地讲吧!

现有动态链接库DLL_Sample.dll

DLL_Sample.h:
#ifdef TEST_API
#    define TEST_API _declspec(dllexport)
#else

#    define TEST_API _declspec(dllimport)
#endif

TEST_API 
int fuc(int a);
TEST_API 
int fuc(int a, int
 b);
TEST_API 
int fuc(int a, int b, int c);

DLL_Sample.cpp:
#define TEST_API
#include 
"DLL_Sample.h"

TEST_API 
int fuc(int a)
{
    
return
 a;
}

TEST_API 
int fuc(int a, int
 b)
{
    
return a +
 b;
}

TEST_API 
int fuc(int a, int b, int
 c)
{
    
return a + b +
 c;
}


在动态调用dll之前,需要查看一下dll导出的函数名称。
查看编译器的导出名称,可以用VS工具目录下的Dependency Walker,或者在控制台下使用命令:dumpbin  /exports  DLL_Sample.dll

这里我用dumpbin命令得到下面的信息:

1    0    00011348    ?fuc@@YAHH@Z
2    1    00011352    ?
fuc@@YAHHH@Z
3    2    000111DB   ?fuc@@YAHHHH@Z


可以看到,重载函数各个版本的名称是不同的,这是因为编译器重新编码了重载函数的名称。
为了方便记忆和使用,我们需要指定重载函数的命名规则,由于导出函数名的唯一性,我们无法将重载函数指定成相同的名称,所以我们采用fuc1、fuc2、fuc3来标识fuc函数的不同版本。
我们用模块定义文件(.def)来定义dll导出。

DLL_Sample.def:
LIBRARY    DLL_Sample
EXPORTS
fuc1
=?
fuc@@YAHH@Z
fuc2
=?
fuc@@YAHHH@Z
fuc3
=?fuc@@YAHHHH@Z

然后写动态调用的示例代码(这里调用了第二个版本的fuc函数):
    
HINSTANCE hInst 
= LoadLibrary("Dll_Sample.dll");
typedef 
int (*MyProc)(int a, int
 b);
MyProc Fuc 
= (MyProc)GetProcAddress(hInst, "fuc2"
);

if (!
Fuc)
{
    MessageBox (
"Fuc2 is null!"
);
    
return
;
}

CString str;
str.Format (
"a + b = %d", Fuc(23
) );
MessageBox(str);

FreeLibrary (hInst);


结果输出“a + b = 5”
 
4/25/2007

基础知识很重要

应该先把Directx编程基础弄牢靠,OGRE终归是一个高层的东西,但是已经掌握的东西也不是没有用处,就像当年毫无目的地学了一些与编程无关的东西,后来发现这些已经为学习3D技术铺平了道路,在学了一点OGRE的皮毛之后,在编程的时候喜欢居高临下的想问题,写出来的东西也是设计为先,好处就不用说了。是知识就要学一点,总会有点用处,没有先前C#的学习,现在学MFC也不会这么顺利,融会贯通才能成就大家。
一直以来都是这种螺旋式的学习,虽然很慢但是视野开阔,好比爬山,别人喜欢直线爬到山顶(一种技术一种编程语言),而我则喜欢一圈一圈绕上山顶,沿途包揽风景,大事晚成矣!
在畏惧中前进!很想从事游戏开发,并非只是因为喜欢玩游戏,而是,我毕生所学如果想要发挥到极致,走这个方向比较有前途,但愿能满足心愿。如果未能实现,我也不必灰心丧气,因为那个门槛实在很高很高。
如果问我本科期间有什么遗憾,我的答案是,没有可以安心学习的机房(不单单是一个机房,还需要项目的支持),没有能够帮助我指明方向的导师(反而他们那种自大让我非常厌恶和失望),没有志同道合的同学(或者说我是个异类),没有舒适的大床让我能保证睡眠质量(夜深人静的时候是我最痛苦的时候)。然而现在一切条件都有了,只是年华老去!
可怜我数学不好,现在在看向量数学,搞图形学的就得肯这东西,头疼不已,没办法。好在有OGRE,OGRE这东西真好,是个相当不错的教材,下一步我的程序里可以借鉴一下。
好久也没有更新,看着实在凄凉,就乱写一气,这应该是一个技术博客,可惜本人水平实在有限,也许以后会丰富起来,但愿如此!但愿如此!
3/3/2007

3D Math

  • A Simple Quaternion-based Camera
  • Matrix and Quaternion FAQ: lots of info on matrix transformations & quaternion rotations.
  • OGRE

    Other Languages

    The main OGRE site and this Wiki are English only for simplicity, but there are several translation sites around the web:

    Recommended Reading

    External Tutorials

    Artificial Intelligence

    AI Links repositories

    SDKs

    General and Specific Architecture Articles

    General Architectures
    PathFinding
    Group AI
    Tactic
    Steering
    Rule-Based System (RBS)
    Neural Networks (NN)
    Fuzzy logic (FL)
    • aiGuru.com
    • bayesian systems... somewhere on generation 5 site.
    Finite State Machine (FSM)
    Decision Tree (DT)
    Emotion
    Lag
    Expert Systems
    Learning Systems

    Games

    Game Developer Sites

    Hardware

    Ati (papers, tools, source) (MUST READ) Nvidia (papers, tools, source) (MUST READ)

    Game/3D Conferences

    Siggraph Conference
    Game developers Conference

    MainStream

    Game Design Patterns

    Game Development

    Publisher-Developer relation

     
    • Send a private message
    • Tell a friend
    • Add to your network