-2
class IEngine: public ICoreObject 
{
private:
    Network     *_Network;
    bool        _Process;

public:
    IEngine();
    ~IEngine();
    void Initial(...);
    void StartServer(unsigned short port);
    bool Process();
    void StopProcess();
    void StartProcess();
    friend void ShellCode(int id,struct NE_Bin var);

};

ShellCodeから_Networkを使用できないのはなぜですか?

これがシェルコード関数の定義です

void ShellCode(int id,struct NE_Bin var) //функция-друг
{
    std::cout<<"ShellFunc Delegated"<<std::endl;
    var.data = (void *)"T";
    var.length = 1;
    //_Network->SendMessageW(id, var);
}

_Networkクラスにアクセスしようとすると、エラーが発生します。

4

2 に答える 2

1

そのメンバー変数にアクセスするには、パラメーターとしてIEngineのインスタンスが必要です...

于 2012-09-21T15:23:23.120 に答える
1

IEngineShellCode友達として持っています。つまり、オブジェクトprivateの**メンバーにアクセスできます。はコンテキスト内の単なる変数であり、何にもバインドされていません。IEngine_Network

このようなものが機能します:

void ShellCode(int id,struct NE_Bin var, IEngine* pEngine)
{
    std::cout<<"ShellFunc Delegated"<<std::endl;
    var.data = (void *)"T";
    var.length = 1;
    pEngine->_Network->SendMessageW(id, var);
}

IEngineただし、 asパラメータを渡す必要があります。

IEngine* pEngine /*initialize it here*/;
ShellCode(0, NE_Bin(), pEngine);

または、メソッド内でグローバルインスタンスを使用できます(存在する場合)。

于 2012-09-21T15:28:20.677 に答える