Здравствуйте!
В COM совсем не умею, тыщу лет назад делал какой-то inproc, и все. Всякие RPC, Proxy, Threading'и и Apartments прошли мимо.
Есть проект от 2008 студии. У меня студия 2017. Сконвертил, поправил кучу говнеца в настройках проектов, осталось вроде последнее, и что-то не соображу.
warning C4005: 'ENTRY_PREFIX': macro redefinition
note: see previous definition of 'ENTRY_PREFIX'
В коде, который, как я понял, сгенерил midlc, есть
#define ENTRY_PREFIX Prx
В итоге не линкуется с такими сообщениями:
error LNK2001: unresolved external symbol PrxDllCanUnloadNow
error LNK2001: unresolved external symbol PrxDllGetClassObject
error LNK2001: unresolved external symbol PrxDllRegisterServer
error LNK2001: unresolved external symbol PrxDllUnregisterServer
unresolved external symbol AlternateStreamOverlay_ProxyFileInfo
Таких функций я что-то не нашел, как и не нашел какого-либо использования ENTRY_PREFIX для возможной препроцессорной генерации этих имен.
Может, кто сталкивался?
...
M>Таких функций я что-то не нашел, как и не нашел какого-либо использования ENTRY_PREFIX для возможной препроцессорной генерации этих имен.
M>Может, кто сталкивался?
Здравствуйте
Вроде было так:
midl генерирует dlldata.c в нем подключен rpcproxy.h (раньше был в Platform SDK, сейчас не знаю) и в нем используется ENTRY_PREFIX для генерации имен.
Здравствуйте, Alexander_S_U, Вы писали:
A_S>Вроде было так:
A_S>midl генерирует dlldata.c в нем подключен rpcproxy.h (раньше был в Platform SDK, сейчас не знаю) и в нем используется ENTRY_PREFIX для генерации имен.
Не совсем так. Этот механизм называется "merging of proxy/stub code" и позволяет слить в одну ДЛЛ как сам код сервера, так и его специальный маршаллинг. Там фигурирует dlldataX.c, а не dlldata.c. Вот есть пример и описание:
In-process ATL COM server (ATLDllCOMServer)
PS
Есть про
_MERGE_PROXYSTUBАвтор:
Дата: 13.03.04
тут у нас на форуме.