私は 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
。それで、問題は、そのメソッドが存在しないと思われる場合、そのメソッドを正確に参照するものは何ですか?
さらに調査を行ったところ、このメソッドは IDL ツールによって生成された .c ファイルを介して参照されていることがわかりました。
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とは少し異なります。
次に、他のどのライブラリをリンクする必要がありますか?