Я должен угадать, на какой COM-компонент вы ссылаетесь, поскольку ваш пост был расплывчатым. Но я предполагаю, что вы написали COM-компонент, который использует или иным образом использует именованный канал, и вы хотите, чтобы он автоматически освобождался (ala RAII ), когда этот COM-компонент уничтожается.
В этом случае вы должны поместить любой код очистки в метод компонента FinalRelease () , например:
void CoMyObject::FinalRelease()
{
CloseHandle(my_pipe_handle_);
}
Другая сторона монеты одноразовой очистки - это код одноразовой инициализации. Если вы также хотите открыть этот именованный канал при создании экземпляра COM-компонента - что указывает ваш заголовок, но не говорится в вашем посте - тогда вы сделаете это в методе FinalConstruct () вашего объекта:
HRESULT CoMyObject::FinalConstruct()
{
my_pipe_handle_ = CreateFile(
lpszPipename, // pipe name
GENERIC_READ | // read and write access
GENERIC_WRITE,
0, // no sharing
NULL, // default security attributes
OPEN_EXISTING, // opens existing pipe
0, // default attributes
NULL); // no template file }
return S_OK;
}