定義全局 _ConnectionPtr pConn 時編譯報錯:
already defined in amazing.obj
.cpp 包含時重複定義。.cpp 中各自定義同名全局變量。GlobalDB.h// 僅聲明,extern 告訴編譯器「定義在別處」
extern _ConnectionPtr g_pConn;
GlobalDB.cpp
#include "GlobalDB.h"
// 真正分配內存的定義
_ConnectionPtr g_pConn;
#include "GlobalDB.h"
// 直接使用 g_pConn
if (g_pConn == NULL) { ... }
class CDBManager
{
public:
static CDBManager& Instance()
{
static CDBManager inst;
return inst;
}
_ConnectionPtr GetConnection() { return m_pConn; }
HRESULT Connect(...)
{
return m_pConn.CreateInstance(__uuidof(Connection));
}
private:
CDBManager() {}
_ConnectionPtr m_pConn;
};
// 使用
CDBManager::Instance().GetConnection()->Execute(...);
CoInitialize),導致 CreateInstance 失敗。單例模式可在首次調用時懶加載初始化。CoMarshalInterThreadInterfaceInStream)。_ConnectionPtr 實為 _com_ptr_t<_com_IIID<_Connection, &__uuidof(Connection)>>,確保引用正確類型庫。