0

関数を定義しました

HRESULT AMEPreviewHandler:: CreateHtmlPreview()
{
    ULONG  CbRead;
    const int Size= 115000;
    char Buffer[Size+1];
    HRESULT hr = m_pStream->Read(Buffer, Size, &CbRead ); 
    //this m_pStream is not accessible here even it is declared globally. the program is asking me to 
    // declare it static because this CreateHtmlPreview() function called 
    //inside the Static function (i mean here :-static CreateDialog\WM_Command\CreateHtmlPreview();)
    //but if i declare it static the two problems arised are 
    //(1.) It is not able to access the value of the m_pStream which is defined globally.
    //(2.)If i declare it static globally then there are so many other function which are using this
    // value of m_pStream are not able to access it because they are non static.  

}

次のように、プログラムのどこかで静的に宣言されています。

static HRESULT CreateHtmlPreview(); //i have declared it static because i am calling this function from DialogProc function.If i dont create it static here it dont work

//The function CreateHtmlPreview() is called inside the DialogProc function like this-

BOOL CALLBACK AMEPreviewHandler::DialogProc(HWND m_hwndPreview, UINT Umsg, WPARAM wParam, LPARAM lParam) 
{......
case WM_COMMAND:
{  
    int ctl = LOWORD(wParam);
    int event = HIWORD(wParam);

    if (ctl == IDC_PREVIOUS && event == BN_CLICKED ) 
    {                       
        CreateHtmlPreview(); //here i am calling the function
        return 0;
    }  
}

}

では、静的関数定義で非静的の値にm_pStreamアクセスできるようにするにはどうすればよいでしょうか?CreateHtmlPreview()

4

4 に答える 4

0

DoctorLove このパラメータを使用して非静的変数にアクセスするというアイデアによって、この問題を実際にコードで解決しました-問題は、WM_INITDIALOG でインスタンスを初期化していなかったことです。

case WM_INITDIALOG: 
            {

                instance = (AMEPreviewHandler*)lParam;
                instance->m_pStream;
return0;
}

そしてそれはうまくいきます。

于 2013-07-23T10:04:00.000 に答える
0

CreateHtmlPreview()無料の関数 を作ったら?
(ストリームから読み取るのではなく) HTML プレビューを作成するだけにするとどうなりますか?

void CreateHtmlPreview(const char * buffer, int size)
{
  //...
}

次に、proc からデータを読み取り、それを呼び出します。DialogProc

//...
m_pStream->Read(Buffer, Size, &CbRead ); 
CreateHtmlPreview(Buffer, Size);

ただし、関数がプレビューを返すようにする必要があるでしょう。
あなたはそれを作る必要があると言います

DialogProc 関数からこの関数を呼び出しているため、静的です

ただし、DialogProc は (投稿したコードでは) 静的ではないため、問題が何であるかわかりません。

于 2013-07-22T14:11:44.120 に答える