如何在.dll类方法参数中传递对象?

时间:2012-11-03 03:03:14

标签: c++ oop visual-c++ dll polymorphism

// SharpEngine.h

namespace SharpEngine {
    class SharpInst {
    public:
        // Insert Game Engine Code.
        // Use this format 
        // static __declspec(dllexport) type function(parameters);

        static __declspec(dllexport) void saveGame(object_as_param_here)
    };
}

如果它说'object_as_param_here',我需要传递一个对象,以便该函数可以访问包含级别,经验,健康等数据的对象。

这也是一个.dll,我该如何制作它以便我可以将它与其他代码一起使用并仍能调用各种对象?

1 个答案:

答案 0 :(得分:4)

您可以使用指针作为参数,因为DLL位于可执行内存中,因此如果您拥有结构的地址和原型,则可以直接从内存中访问它。我给你举个例子:

假设您在可执行文件中有这个简单的原型:

class Player
{
public:
    int money;
    float life;
    char name[16];
};

您可以将其复制到DLL的源代码中,因此您有一个声明,让DLL知道如何在给出指针时访问成员。

然后你可以export the function to the executable给出示例原型:

static __declspec(dllexport) void saveGame(Player *data);

现在你可以从可执行文件中调用DLL的函数,如下所示:

Player *player = new Player;
player->money = 50000;
player->life = 100.0f;
saveGame(player);

或者,如果您不将播放器的类用作可执行代码中的指针,您仍然可以传递其地址:

Player player;
player.money = 50000;
player.life = 100.0f;
saveGame(&player);

在你的saveGame函数中,你可以将结构作为指针访问:

data->money