Я экспериментирую с хостингом CLR (пока не пытаюсь использовать моно, хотя, вероятно, попробую).По сути, я слежу за этим:
http://www.lenholgate.com/blog/2010/07/clr-hosting---a-flexible-managed-plugin-system-part-1.html
Однако у меня есть некоторые проблемы с самим COM, так как это не так подробно объясняется в этой статье, и я учусьпо ходу дела (раньше я не играл с COM).
Я определил интерфейс:
import "unknwn.idl";
[
object,
uuid(55d96f88-9633-4ad7-b9de-1a546ea73307),
helpstring("INative interface"),
pointer_default(unique)
]
interface INative : IUnknown
{
HRESULT Write(BSTR s);
}
[
object,
uuid(74eeeaaa-d73c-436e-b52d-5c8a972ce60a),
helpstring("ITestManager Interface"),
pointer_default(unique)
]
interface IManagedHost : IUnknown
{
HRESULT Init(INative* native);
}
И включил сгенерированные файлы в свой собственный проект.Однако я не могу собрать исполняемый файл, потому что компоновщик не может разрешить: _CStdStubBuffer_Release@4
.RpcRT4.lib
связан, но я запустил dumpbin rpcrt4.lib /all | grep _CStdStubBuffer_Release
, и ничего такого, экспортируемого этой библиотекой, нет, есть CStdStubBuffer_DebugServerRelease
.Итак, вопрос в том, что именно ссылается на этот метод, если он предположительно не должен существовать?
Было ли проведено еще какое-то исследование, и я обнаружил, что на этот метод ссылается файл .c, созданный инструментом IDL:
const CInterfaceStubVtbl _INativeStubVtbl =
{
&IID_INative,
&INative_ServerInfo,
4,
0, /* pure interpreted */
CStdStubBuffer_METHODS
};
и CStdStubBuffer_METHODS определены в RpcProxy.h
Windows SDK v7.0A
:
#define CStdStubBuffer_METHODS \
CStdStubBuffer_QueryInterface,\
CStdStubBuffer_AddRef, \
CStdStubBuffer_Release, \
CStdStubBuffer_Connect, \
CStdStubBuffer_Disconnect, \
CStdStubBuffer_Invoke, \
CStdStubBuffer_IsIIDSupported, \
CStdStubBuffer_CountRefs, \
CStdStubBuffer_DebugServerQueryInterface, \
CStdStubBuffer_DebugServerRelease
, который действительно хочет, чтобы метод CStdStubBuffer_Release, хотя он немного отличается от: http://msdn.microsoft.com/en-us/library/windows/desktop/ms764247%28v=VS.85%29.aspx.
Какую другую библиотеку я должен связать тогда?