2011-03-09 79 views
2

我正在使用VS2008在現有的C++ COM DLL上進行開發。_ATL_APARTMENT_THREADED和_ATL_FREE_THREADED衝突

編譯器說: 「中定義多個全局線程模型」

我StdAfx.hi

得到這個定義:
#define _ATL_APARTMENT_THREADED

我初始化COM此:
CoInitialize(NULL);

但我找不到_ATL_FREE_THREADED的定義。編譯器警告表明兩者都必須在某處定義。但我不知道在哪裏可以找到_ATL_FREE_THREADED。

任何想法,爲什麼我得到編譯器味精?

感謝克林斯曼

回答

0

這些符號裏面atlbase.hatldef.h駐留與其他ATL頭沿定義 - 你可以看看那裏,看到有用於檢測這些符號之一是否有蜜蜂已經設置並設置了一些簡單的邏輯一個默認的。

+0

感謝您的提示。但我怎樣才能避免得到這個警告? – juergen 2011-03-09 12:49:05

+0

@juergen:顯然你在代碼中的不適當的時候定義了這個符號。正確的做法是首先定義符號,然後包含ATL字符。 – sharptooth 2011-03-09 12:51:26

+0

啊,我明白了。會做。謝謝! – juergen 2011-03-09 12:52:52

0

它確實聽起來像你的代碼定義_ATL_FREE_THREADED。你可以撒...

 
#ifdef _ATL_FREE_THREADED 
#pragma message ("hi") 
#endif 

...之間的各種包括文件,看是否能找到它定義宏的一個。在你做之前,你有沒有檢查過,以確定它沒有在項目屬性中定義(在項目和cpp文件級別)?