gpt4 book ai didi

c# - 从 C++ 头文件 : Pointers to Structures 创建 C# COM 接口(interface)

转载 作者:行者123 更新时间:2023-11-28 02:55:32 27 4
gpt4 key购买 nike

我正在尝试为下面给定的 C++ COM 接口(interface)创建 C# COM 接口(interface),但我遇到了麻烦。

C++ COM 接口(interface)(工作)

typedef struct _cmd_t
{
int kmdf_drv_ver;
int kmdf_drv_buildtime;
// more, but omitted...
}cmd_t, *pCmd_t;

#ifdef __cplusplus
extern "C" {
#endif

{
STDMETHOD(GetCommands) (THIS_
pCmd_t pCmd
) PURE;

STDMETHOD(SetCommands) (THIS_
pCmd_t pCmd
) PURE;
};
#ifdef __cplusplus
}
#endif

C# COM 接口(interface)(不工作)

[ComImport, Guid("574358C5-E59D-45b2-8976-0BA03D81EC07")]
public interface IRaw
{
[PreserveSig]
int GetCommands(IntPtr pCmd);

[PreserveSigAttribute]
int SetCommands(IntPtr pCmd);
}

[StructLayout(LayoutKind.Sequential)]
public struct IRawCmd
{
public int kmdf_drv_ver;
public int kmdf_drv_buildtime;
// more, but ommited
}

当我调用 GetCommands 时,COM 服务应该用值填充结构。但是,似乎使用以下代码,结构保持不变。

var commands = new IRawCmd();
var pointer = Marshal.AllocHGlobal(Marshal.SizeOf(commands));
Marshal.StructureToPtr(commands, pointer, false);

_deviceFilterRaw.GetCommands(pointer);

var result = Marshal.PtrToStructure(pointer, typeof (IRawCmd));

我做错了什么吗?我应该在我的 C# 界面中使用 ref 参数吗?

最佳答案

将此属性应用于接口(interface)InterfaceType(ComInterfaceType.Inter‌ faceIsIUnknown):

[ComImport, Guid("574358C5-E59D-45b2-8976-0BA03D81EC07",InterfaceType(ComInterfaceType.Inter‌​faceIsIUnknown)]

ComInterfaceType

关于c# - 从 C++ 头文件 : Pointers to Structures 创建 C# COM 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22085230/

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