2012-11-03 3 views
2
// 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) 
    }; 
} 

Où il est dit «object_as_param_here Je dois passer un objet pour que la fonction peut accéder à l'objet qui contient des données comme le niveau, l'expérience, la santé, etc.Comment passer un objet dans un paramètre de méthode de classe .dll?

Ceci est dans une .dll aussi bien, comment ferais-je pour que je puisse utiliser ceci avec d'autres codes et être capable d'appeler divers objets?

Répondre

4

Vous pouvez utiliser un pointeur comme paramètre, car la DLL est dans la mémoire exécutable, donc si vous avez l'adresse et le prototype de la structure, vous pouvez y accéder directement depuis la mémoire. Je vais vous donner un exemple:

Supposons que vous ayez ce simple prototype dans votre exécutable:

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

Vous pouvez simplement le copier sur le code source de la DLL, vous avez une déclaration et laisser le DLL savoir comment accéder aux membres en donnant un pointeur.

Ensuite, vous pouvez export the function to the executable, donner le prototype d'exemple:

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

Maintenant, vous pouvez simplement appeler la fonction de la DLL de l'exécutable, comme ceci:

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

Ou si vous n'utilisez pas la classe du joueur comme un pointeur dans votre code exécutable, vous pouvez toujours passer son adresse:

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

Et dans votre fonction saveGame, vous accéder à la struct comme pointeur:

data->money 
+0

Merci! Cela a vraiment aidé! M'a beaucoup appris! – Tux

Questions connexes