Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Delphi记录结构转换为C#并从结构中获取数据_C#_Delphi_Record - Fatal编程技术网

如何将Delphi记录结构转换为C#并从结构中获取数据

如何将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#如下

我最近在一个dll调用上做了一些工作。dll用于与com对象通信。在帮助文件中,示例是用Delphi编写的。有一个名为
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
,但在最后一个示例中,您似乎建议它是一个记录而不是一个整数。我刚刚更新了这个问题?请您再帮我一次好吗?这个更新实际上没有什么好的。这个问题应该结束了。