C++ 什么';这是在c++;?

C++ 什么';这是在c++;?,c++,winapi,atl,C++,Winapi,Atl,如何将上述内容转换为ATL方式,以便在COM组件被销毁时自动关闭管道?我不得不猜测您指的是什么COM组件,因为您的帖子很模糊。但我猜您已经编写了一个COM组件,它包装或使用了一个命名管道,并且您希望在销毁该COM组件时自动释放(ala) 在这种情况下,您可以将任何清理代码放入组件的方法中,例如: hPipe = CreateFile( lpszPipename, // pipe name GENERIC_READ | // read and writ

如何将上述内容转换为ATL方式,以便在COM组件被销毁时自动关闭管道?

我不得不猜测您指的是什么COM组件,因为您的帖子很模糊。但我猜您已经编写了一个COM组件,它包装或使用了一个命名管道,并且您希望在销毁该COM组件时自动释放(ala)

在这种情况下,您可以将任何清理代码放入组件的方法中,例如:

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);