gpt4 book ai didi

c# - 使用用户定义的类型对象创建 SafeArray

转载 作者:太空宇宙 更新时间:2023-11-03 15:25:33 24 4
gpt4 key购买 nike

我正在使用 Delphi 和 C# 之间的互操作性概念。我在 c# 中创建了类,并将这些类作为 com 对象导入到 delphi 项目中。c#代码中的类声明

public class HotelAvailNotifRQ : IHotelAvailNotifRQ
{
[MarshalAs(UnmanagedType.LPArray)]
public IAvailStatusMessage[] AvailStatusMessagesField;

public IAvailStatusMessage[] AvailStatusMessages
{
get { return AvailStatusMessagesField; }
set { AvailStatusMessagesField = value; }
}
}

当我将此类作为 com 对象导入到 delphi 时,就像

IHotelAvailNotifRQ = interface(IDispatch)
['{2F7C57D7-256A-3102-A4C6-FD081C8342B4}']
function Get_AvailStatusMessages: PSafeArray; safecall;
procedure Set_AvailStatusMessages(pRetVal: PSafeArray); safecall;
property AvailStatusMessages: PSafeArray read Get_AvailStatusMessages write Set_AvailStatusMessages;
end;

我可以成功创建 IAvailStatusMessage 对象。但是,当我使用函数将这个对象放入 PSafeArray 时

SafeArrayPutElement(HotelAvailNotifRQ.AvailStatusMessages, Idx, AvailStatusMessage)

我收到类似“参数不正确” 的错误。请帮我解决这个问题。

最佳答案

经过一天的努力,找到了解决问题的办法。将双方代码更改为之后,

Delphi 端代码

var
varAvailStatusMessages : Variant;
begin
varAvailStatusMessages := VarArrayCreate([0, AvailStatusMessages.Count], varDispatch);
varAvailStatusMessages[asmIdx] := AvailStatusMessage;
Result.AvailStatusMessages := PSafeArray(TVarData(varAvailStatusMessages).VArray);
end;

.Net端代码

public class HotelAvailNotifRQ : IHotelAvailNotifRQ
{
[MarshalAs(UnmanagedType.Interface)]
public IAvailStatusMessage[] AvailStatusMessagesField;

public IAvailStatusMessage[] AvailStatusMessages
{
get { return AvailStatusMessagesField; }
set { AvailStatusMessagesField = value; }
}
}

感谢引用, http://blog.virtec.org/2008/07/the-mysteries-of-psafearray/

关于c# - 使用用户定义的类型对象创建 SafeArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35477576/

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