关于C#做的COM服务 问题

jxw3000 jxw3000 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我用C#做了个进程外服务器实现了一个接口
[Guid("39c13a4d-011e-11d0-9675-0020afd8adb3")]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
ITest
{
void fuc0( ref System.Guid riid, [MarshalAs(UnmanagedType.Interface)]out object ppvObject);
void fuc1(ref System.Guid riid, [MarshalAs(UnmanagedType.IUnknown)]out object ppUnk);
void fuc2();
}
public CTest:ITest
{
void fuc0( ref System.Guid riid,out object ppvObject)
{
ppvObject = this;
}
void fuc1(ref System.Guid riid,out object ppUnk)
{
IntPtr pSite = IntPtr.Zero;
IntPtr pUnk = Marshal.GetIUnknownForObject(this);
Marshal.QueryInterface(pUnk, ref riid, out pSite);
Marshal.Release(pUnk);
Marshal.Release(pUnk);
ppUnk = pSite;
或者 用下面的实现
ppUnk= this;
}
void fuc2()
{
MessageBox.Show("fuc2 ok");
}

用C++调用
ITest:IUnknown
{
HRESULT fuc0(REFIID riid, LPVOID* ppvObject);
HRESULT fuc1(REFIID riid, LPUNKNOWN *ppUnk);
HRESULT fuc2();
}

在用实际运行期间 fuc0 的riid参数是 IDD_ITest ,返回结果正确,
fuc1的的riid参数是 IDD_IUnknown,返回结果是0xc0000005,ppUnk == NULL;
fuc2结果正确。
做了很多试验,发现如果参数是LPUNKNOWN *ppUnk 都回出错

...全文

相关推荐

评论 5
收藏 已收藏
分享
返回顶部
jxw3000
C# 111,129 成员 642,539 内容