Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.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
C# 将delphi程序转换为C语言时遇到的问题#_C#_Delphi_Parameters_Delphi 7 - Fatal编程技术网

C# 将delphi程序转换为C语言时遇到的问题#

C# 将delphi程序转换为C语言时遇到的问题#,c#,delphi,parameters,delphi-7,C#,Delphi,Parameters,Delphi 7,我已经做了一段时间,运气不好 我有这个delphi程序,我没有写,也没有原始程序来测试。请记下评论,看看它应该做什么: // first parameter is an input string, and the others are returned contents // parsed. Example: "Okay:C15" would be parsed as "Okay", "C", 15, 0 procedure TestingThis(const astring: string;

我已经做了一段时间,运气不好

我有这个delphi程序,我没有写,也没有原始程序来测试。请记下评论,看看它应该做什么:

// first parameter is an input string, and the others are returned contents
// parsed. Example: "Okay:C15" would be parsed as "Okay", "C", 15, 0
procedure TestingThis(const astring: string; var aname: string;
                     var atype: char; var alength: byte; var adecimals: byte);
var
  ipos,jpos: integer;
  aa: string;
begin
  aname:='';
  atype:='C';
  alength:=1;
  adecimals:=0;
  aa:=astring;
  ipos:=pos(':',aa);
  if ipos > 1 then
  begin
     aname:=copy(aa,1,ipos-1);
     aa:=copy(aa,ipos+1,length(aa)-ipos);
     atype:=aa[1];
     if atype = 'A' then exit;
     if atype = 'B' then
     begin
       alength:=8;
       exit;
     end;
     if atype = 'C' then
     begin
        alength:=strtoint(copy(aa,2,length(aa)-1));
        exit;
     end;
     if atype = 'D' then
     begin
       jpos:=pos('.',aa);  
       if jpos < 1 then  
       begin
         alength:=strtoint(copy(aa,2,length(aa)-1));
         adecimals:=0;
       end
       else
       begin
         alength:=strtoint(copy(aa,2,jpos-2));
         adecimals:=strtoint(copy(aa,jpos+1,length(aa)-jpos));
       end;
       exit;
     end;
  end;
end;
不过我很困惑。在Delphi代码中,只有一个参数是一个输入:
astring
,其余的应该是返回值?这怎么可能?从我读到的内容中,我没有看到任何关于一个参数进入和4个参数退出的信息,
var
关键字意味着它们是通过引用传递的,这意味着我应该在c版本中使用
ref
。函数本身应该只被调用一次,而输入实际上是一个字符串

编辑:将我的功能更改为:

public static void TestingThis(string astring, out string aname, out char atype, out byte alength, out byte adecimals)
我这样称呼它:

    string test = "Okay:C15";
    string aname;
    char atype;
    byte alength;
    byte adecimals;
    TestingThis(test, out aname, out atype, out alength, out adecimals);

如果您想在一个非引用的方法中返回多个值(例如,如果您调用一个方法并想返回某人的年龄),那么从Delphi到C#的转换是否正确。。当您只需要使用一个简单的out参数时,为什么要使用ref关键字将age更改为返回值age。。在C#out参数上进行msdn谷歌搜索,您需要了解ref.之间的明显差异。。然后出去。。此外,如果您想用作全局变量,例如,您可以在方法中传递这些ref值。但是windows和web是不同的。。因此,当您开始更频繁地使用这两种语言进行编码时,请小心。

var
是C#中的一个关键词,
隐式与显式
告诉您变量类型是什么。。此外,如果方法签名具有
out
参数,则可以从一个方法返回尽可能多的值,例如
var myVar=new DataTable
这与显式地说
DataTable myVar=new DataTable()相同
和要在C#中通过ref传递,您仍然需要在方法签名中声明
ref
关键字,以及在
C#MSDN var
上进行谷歌搜索。此外,如果您希望从发布的C#方法返回值,则需要将void更改为实际的数据类型,它将是
out
看看这篇精彩的文章/解释-我也知道Delphi在我22年的编码中有17年的编码都非常好这是正确的Delphi你不需要初始化参数,但是C#.net你需要初始化参数,尤其是那些你将用作out参数的参数。如果你想在一个非引用的方法中返回多个值例如,如果您调用一个方法并希望返回某人的年龄。。当您只需要使用一个简单的out参数时,为什么要使用ref关键字将age更改为返回值age。。在C#out参数上进行msdn谷歌搜索,您需要了解ref.之间的明显差异。。然后出去。。此外,如果您想用作全局变量,例如,您可以在方法中传递这些ref值。但是windows和web是不同的。。因此,当您开始更频繁地在这两种语言中进行编码时,请小心。您仍然需要初始化out参数,或者执行以下操作,例如`string aname=string.Empty;`或者您可以使用(默认)关键字,但我更喜欢string.Empty vs
string aname=(默认)string始终初始化整数=0,对象=null,字符串=string.Empty;或者一些字符串值。字符=
''
小数=0.0而不是0等。。你明白了
public static void TestingThis(string astring, out string aname, out char atype, out byte alength, out byte adecimals)
    string test = "Okay:C15";
    string aname;
    char atype;
    byte alength;
    byte adecimals;
    TestingThis(test, out aname, out atype, out alength, out adecimals);