如何将Delphi记录结构转换为C#并从结构中获取数据
我最近在一个dll调用上做了一些工作。dll用于与com对象通信。在帮助文件中,示例是用Delphi编写的。有一个名为如何将Delphi记录结构转换为C#并从结构中获取数据,c#,delphi,record,C#,Delphi,Record,我最近在一个dll调用上做了一些工作。dll用于与com对象通信。在帮助文件中,示例是用Delphi编写的。有一个名为OnOperatorInfo的事件,首先调用名为MethodA的方法,然后引发事件,事件返回Delphi中定义的以下内容: OnOperatorInfoMsg = procedure(Sender: TObject; wOperatorCount: Integer; OperatorsInfo: Integer) of object; 通过dnspy,我发现事件被翻译成C#如下
OnOperatorInfo
的事件,首先调用名为MethodA
的方法,然后引发事件,事件返回Delphi中定义的以下内容:
OnOperatorInfoMsg = procedure(Sender: TObject; wOperatorCount: Integer; OperatorsInfo: Integer) of object;
通过dnspy,我发现事件被翻译成C#如下:
public class OnOperatorInfoMsgEvent
{
public int wOperatorCount;
public int operatorsInfo;
public OnOperatorInfoMsgEvent(int wOperatorCount, int operatorsInfo);
}
delphi中的OperatorsInfo定义如下:
OPINFO
OPINFO = record
wAgentID: WORD;
wSkillGroupID: WORD;
wWorkGroupID: WORD;
AgentStatus: AGENT_STATUS;
end;
如何从C#获取OperatorsInfo中的wAgentID、wSkillGroupID、AgentStatus?此问题已在华为开发BBS中解决:
这里没有足够的细节来回答。您需要对问题进行重大编辑。但是我可以说Delphi类型
tccctrlxonoperatorinfo
在C#中没有易于互操作的定义。当然,假设您确实在C#host可执行文件和Delphi DLL之间执行pinvoke互操作。但即便如此,这也是猜测。这至少是两个问题,甚至可能更多。您对tccctrlxonoperatorinfomsg
的翻译完全不正确-它不是一个类,而是一个方法引用(正如@DavidHeffernan所指出的,C#不能使用它)。在第一个示例中,您有OperatorsInfo:Integer
,但在最后一个示例中,您似乎建议它是一个记录而不是一个整数。我刚刚更新了这个问题?请您再帮我一次好吗?这个更新实际上没有什么好的。这个问题应该结束了。