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 (как я могу гарантировать, что эти два не перезаписывают друг друга тогда?)

Кроме того, я знаю, что для Skype существует API, но я хочу сделать это таким образом. Я бы использовал Skype API, если бы хотел написать серьезную программу. Благодарю.

1 ответ

Конечно, это вылетает. "Внедрение DLL в другой процесс" - это то, что вы не должны делать в первую очередь, и, конечно, нет, если вы не можете понять это.

Ваша проблема в том, что ваша DLL делает предположения о среде, в которой она работает. В частности, вы предполагаете, что есть куча C++ (или куча C, для malloc), и это имеет точно правильное состояние для вашей программы. Это просто не тот случай. Обычные правила C++ не применяются к внедренным DLL; Ваша DLL должна быть в состоянии стоять на собственных ногах.

Другие вопросы по тегам