0

小さな DLL を作成しています。この DLL はターゲット プロセスに挿入されるhwndと、ウィンドウのテキストを見つけてファイルに書き込みます。私は次のように設定しています:

hWnd = FindWindow(L"tSkMainForm",NULL);
chat = FindWindowEx(hWnd, NULL, L"TConversationForm", NULL);
ofstream myfile("X:\\Handles.txt", ios::out | ios::app);
if (myfile.is_open())
{
    int len;
    len = SendMessage(chat, WM_GETTEXTLENGTH, 0, 0) + 1; // + 1 is for the null term.
    char* buffer = new char[len];
    SendMessageW(chat, WM_GETTEXT, (WPARAM)len, (LPARAM)buffer);
    myfile.write(buffer,len); /* << buffer <<endl; */
    myfile.close();
    delete[] buffer;
}

一見ランダムな時間だけ動作し、その後アプリケーション (Skype) がクラッシュします。メモリを割り当てたときにのみクラッシュします。私は使用mallocしてみました:

char* buffer = (char*)malloc(len); //I even tried removing "(char*) before malloc
//Do the rest of the stuff here
free((void*) buffer);

しかし、それもクラッシュします。

私の DLL は を呼び出しCreateThread、 を介して追加のメニュー項目を追加し、AppendMenuそのメッセージをすべて完全に処理します。メモリの割り当ては機能したくないようですが、ランダムな時間にのみ機能します。よくわかりませんが、Skype が私のメモリを上書きしている、または Skype のメモリを上書きしていると思います (2 つのメモリが互いに上書きされないようにするにはどうすればよいでしょうか?)

また、Skype 用の API が存在することは知っていますが、この方法で実現したいと考えています。本格的なプログラムを書きたい場合は、Skype API を使用します。ありがとう。

4

1 に答える 1