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)
    };
}

'object_as_param_here' と表示されている箇所には、関数がレベル、経験、健康などのデータを含むオブジェクトにアクセスできるように、オブジェクトを渡す必要があります。

これは .dll にもありますが、これを他のコードで使用し、さまざまなオブジェクトを呼び出すことができるようにするにはどうすればよいでしょうか?

4

1 に答える 1

4

DLL は実行可能メモリ内にあるため、ポインターをパラメーターとして使用できます。そのため、構造体のアドレスとプロトタイプがあれば、メモリから直接アクセスできます。例を挙げます:

実行可能ファイルに次の単純なプロトタイプがあるとします。

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

それを DLL のソース コードにコピーするだけでよいので、宣言を行い、ポインターを与えるときにメンバーにアクセスする方法を DLL に知らせます。

次に、サンプル プロトタイプを指定して、関数を実行可能ファイルにエクスポートできます。

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
于 2012-11-03T12:20:30.450 に答える