C++ 什么';这是在c++;?
如何将上述内容转换为ATL方式,以便在COM组件被销毁时自动关闭管道?我不得不猜测您指的是什么COM组件,因为您的帖子很模糊。但我猜您已经编写了一个COM组件,它包装或使用了一个命名管道,并且您希望在销毁该COM组件时自动释放(ala) 在这种情况下,您可以将任何清理代码放入组件的方法中,例如:C++ 什么';这是在c++;?,c++,winapi,atl,C++,Winapi,Atl,如何将上述内容转换为ATL方式,以便在COM组件被销毁时自动关闭管道?我不得不猜测您指的是什么COM组件,因为您的帖子很模糊。但我猜您已经编写了一个COM组件,它包装或使用了一个命名管道,并且您希望在销毁该COM组件时自动释放(ala) 在这种情况下,您可以将任何清理代码放入组件的方法中,例如: hPipe = CreateFile( lpszPipename, // pipe name GENERIC_READ | // read and writ
hPipe = 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
一次性清理硬币的另一面是一次性初始化代码。如果您还希望在COM组件实例化时打开此命名管道(您的标题建议,但您的帖子没有说明),那么您可以在对象的方法中执行此操作:
#包括
#包括
CAtlFile m_文件;
m_file.Create(lpszPipeName,GENERIC_READ | GENERIC_WRITE,0,OPEN_EXISTING);
据推测,m_文件是类的一个成员变量。当类实例获得最终版本(并随后销毁)时,m_文件的析构函数将关闭与管道关联的句柄。什么COM组件被销毁?
void CoMyObject::FinalRelease()
{
CloseHandle(my_pipe_handle_);
}
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;
}
#include <atlbase.h>
#include <atlfile.h>
CAtlFile m_file;
m_file.Create(lpszPipeName, GENERIC_READ|GENERIC_WRITE, 0, OPEN_EXISTING);