COM, ENTRY_PREFIX и PrxDll*
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 19.03.19 21:21
Оценка:
Здравствуйте!

В 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 для возможной препроцессорной генерации этих имен.

Может, кто сталкивался?
Маньяк Робокряк колесит по городу
Re: COM, ENTRY_PREFIX и PrxDll*
От: Alexander_S_U https://github.com/alexanders-code/cmdxmlinstaller
Дата: 28.03.19 19:06
Оценка: +1
...
M>Таких функций я что-то не нашел, как и не нашел какого-либо использования ENTRY_PREFIX для возможной препроцессорной генерации этих имен.

M>Может, кто сталкивался?


Здравствуйте

Вроде было так:
midl генерирует dlldata.c в нем подключен rpcproxy.h (раньше был в Platform SDK, сейчас не знаю) и в нем используется ENTRY_PREFIX для генерации имен.
https://github.com/alexanders-code/cmdxmlinstaller
Re[2]: COM, ENTRY_PREFIX и PrxDll*
От: Vi2 Удмуртия http://www.adem.ru
Дата: 28.03.19 20:15
Оценка:
Здравствуйте, 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
тут у нас на форуме.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Отредактировано 28.03.2019 20:21 Vi2 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.