Звоните:
TMemo* MemoChat = // You defined that somewhere I assume
HANDLE hNetThread = CreateThread(NULL, 0, NetThread, MemoChat, 0, &dwNetThreadId);
Здесь происходит то, что любой указатель, который вы передаете в качестве третьего параметра, автоматически преобразуется в указатель void (или в WinTerms LPVOID). Это нормально, это не меняет его, оно просто теряет информацию о типе, так как система ничего не знает о вашем объекте.
Новая точка начала потока:
DWORD NetThread(LPVOID lpParameter)
{
TMemo* MemoChat = reinterpret_cast<TMemo*>(lpParameter);
// Do your thread stuff here.
}
После вызова метода запуска потока. Просто преобразуйте указатель void обратно в правильный тип, и вы сможете снова его использовать.
Просто чтобы прояснить другие заблуждения.
A РУЧКА - это указатель .
И вы могли бы передать его в качестве параметра в NetThread ().
РУЧКА - это указатель на указатель под управлением системы, который указывает на объект, который вы используете. Так почему двойная косвенность. Это позволяет системе перемещать объект (и обновлять его указатель), не находя всех владельцев объекта. У всех владельцев есть маркеры, которые указывают на только что обновленный указатель.
Это старомодная концепция информатики, которая редко используется в современных компьютерах из-за способности ОС / оборудования переставлять основную память во вторичное хранилище. но для определенного ресурса они все еще полезны. В настоящее время, когда требуются ручки, они скрыты внутри объектов подальше от пользователя.