Какой смысл _MERGE_PROXYSTUB?

bool является основополагающим типом данных в C++. Преобразование true к целому типу уступит 1, и преобразование false уступит 0 (4.5/4 и 4.7/4). В C, до C99, не было никакого bool типа данных, и люди действительно наполняли как

enum bool {
    false, true
};

Так сделал Windows API. Начиная с C99, мы имеем _Bool как тип основных данных. Включая stdbool.h <ударит> определение типа #define, что к bool и обеспечивают константы true и false. Они не сделали bool основным типом данных (и таким образом ключевое слово) из-за проблем совместимости с существующим кодом.

11
задан Rob 18 September 2009 в 12:54
поделиться

2 ответа

You need a proxy/stub if you want your COM object to be called from an application using a different threading model than your COM object.

For example, we have a plug in that gets loaded by an application that uses a particular threading model (can't remember which), but our COM object is multithreaded apartment (MTA) - so the the proxy/stub is required to marshall the data between the objects when a function call is made, while still adhering to the rules of the threading model.

If these rules are broken, then COM will either throw an exception or return a failure HRESULT such as RPC_E_WRONG_THREAD

If you don't check the merge proxy/stub option, then visual studio produces a seperate project for the proxy/stubs which get build into a seperate dll. This makes things more difficult for deployment if they are required, but you can basically just ignore them if you are not affected by threading model issues.

So you can do without proxy/stubs if the application calling the COM object is using the same threading model as your object

Larry Osterman provides a readable introduction to threading models on his blog.

16
ответ дан 3 December 2019 в 06:22
поделиться

Кроме того, если ваши интерфейсы содержат только типы, удобные для библиотеки типов (BSTR, VARIANT и т. Д.) И появляются в блоке библиотеки вашего IDL, вы можете выбрать их «упорядоченную библиотеку типов», что означает, что предоставленный системой proxy / stub использует метаданные из библиотеки типов.

Когда интерфейсы помещаются в блок библиотеки, и DllRegisterServer настроен для регистрации библиотеки типов (передайте TRUE в XxxModule :: DllRegisterServer, если я правильно помню) ваши интерфейсы будут упорядочены системой, если необходимо, как описано Джоном Сибли.

В этот момент прокси / заглушка даже не используется, поэтому _MERGE_PROXYSTUB не имеет никакого эффекта.

3
ответ дан 3 December 2019 в 06:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: