gpt4 book ai didi

c# - 如何将 IDispatch* 放入托管代码中

转载 作者:太空宇宙 更新时间:2023-11-03 13:28:30 26 4
gpt4 key购买 nike

我一直在考虑尝试使用实现 OPOS 服务对象的 C# 编写 COM 对象。我已经使用 Automation 和 MFC 在 C++ 中完成了它,这并不太难。所以我一直坚持尝试将其转换的方法之一。我将排除界面中的其他方法,因为它们很简单(或者我希望如此)。

[id(6), helpstring("method OpenService")]
LONG OpenService(BSTR lpclDevClass, BSTR lpclDevName, IDispatch* lpDispatch);

到目前为止,我的 C# 代码看起来像这样,但我仍然停留在 OpenService 上。

[ComVisible(true)]
[Guid("76F8309C-3837-4065-960F-BE156383896D")]
[ClassInterface(ClassInterfaceType.AutoDispatch)]
public class IErtMSR
{
[DispId(1)]
int COFreezeEvents([MarshalAs(UnmanagedType.VariantBool)] bool Freeze);
[DispId(2)]
int GetPropertyNumber([In] int lPropIndex);
[DispId(3)]
void SetPropertyNumber([In] int lPropIndex, [In] int nNewValue);
[DispId(4), MarshalAs(UnmanagedType.BStr)]
string GetPropertyString([In] int lPropIndex);
[DispId(5)]
void SetPropertyString([In, MarshalAs(UnmanagedType.BStr)] string StringData);
[DispId(6)]
int OpenService([In, MarshalAs(UnmanagedType.BStr)] string lpclDevClass, [In, MarshalAs(UnmanagedType.BStr)] string lpclDevName, IDispatch* lpDispatch);
//...the rest of the 24 methods.
}

如您所见,我不知道为 IDispatch* 添加什么。在这种情况下我用什么?

最佳答案

您不需要为 COM IDispatch 创建托管定义或显式实现其成员。该框架有一个内置的支持。只需像这样声明您的 OpenService:

[DispId(6)]
int OpenService(
[In, MarshalAs(UnmanagedType.BStr)] string lpclDevClass,
[In, MarshalAs(UnmanagedType.BStr)] string lpclDevName,
[In, MarshalAs(UnmanagedType.IDispatch] object lpDispatch);

关于c# - 如何将 IDispatch* 放入托管代码中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21472700/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com