Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.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# 如何从Visual Basic访问C中类的属性?_C#_Generics_Vb6_Com Interop - Fatal编程技术网

C# 如何从Visual Basic访问C中类的属性?

C# 如何从Visual Basic访问C中类的属性?,c#,generics,vb6,com-interop,C#,Generics,Vb6,Com Interop,在上面的主题中我需要帮助。我已经完成了VB6应用程序使用C dll所需的一切工作。我已经到了无法访问类的属性来获取ID的地步 我将此函数称为C函数: public resultRetrieveWIP RetrieveWIP(string serialNumber) { string header = string.Format("Bearer {0}", User.Token); var request = new RestRequest(); request.M

在上面的主题中我需要帮助。我已经完成了VB6应用程序使用C dll所需的一切工作。我已经到了无法访问类的属性来获取ID的地步

我将此函数称为C函数:

public resultRetrieveWIP RetrieveWIP(string serialNumber)
{
     string header = string.Format("Bearer {0}", User.Token);

     var request = new RestRequest();
     request.Method = Method.GET;
     request.Resource = "api/wips";
     request.AddParameter("serialNumber", serialNumber);
     request.AddHeader("Authorization", header);

     var client = new RestClient(_iFactoryURL);
     var response = client.Execute(request);
     var uri = client.BuildUri(request);
     _lastRequest = uri.ToString();
     _lastResponse = response.Content;

     try
     {
          var settings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, MissingMemberHandling = MissingMemberHandling.Ignore };
          return JsonConvert.DeserializeObject<resultRetrieveWIP>(response.Content,settings);
     }
     catch
     {
          throw new Exception(jsonErrorHandler("RetrieveWIP",response.Content));
     }
}
我在标有****的行代码处有问题

它给出了一个错误

参数数目错误或属性分配无效

获取id属性值的正确方法是什么?

在VB6中不受支持,因此您无法访问t项列表,这正是getWIP.wips0所做的。您可以在resultRetrieveWIP类中改用非泛型集合:

有关更多详细信息,请参阅以下文章:

在VB6中不受支持,因此无法访问t项列表,这就是getWIP.wips0所做的。您可以在resultRetrieveWIP类中改用非泛型集合:

有关更多详细信息,请参阅以下文章:

如前所述,泛型不能导出到COM

一个选项是添加单独的IEnumerable包装器属性,以便通过COM访问,如下所示:

public class resultRetrieveWIP
{
    public List<wip> wips { get; set; }

    [ComVisible(true)]
    public IEnumerable GetWipsCOM() => wips;
}
通过这种方式,C内部的代码可以使用正确的全类型泛型列表,而无需任何更改,VB6或任何其他COM使用者也可以访问数据

COM和VB6支持IEnumerable。ie可以通过VB6中的GetWipsCOM的结果为每一个函数进行计算。

如前所述,泛型不能导出到COM

一个选项是添加单独的IEnumerable包装器属性,以便通过COM访问,如下所示:

public class resultRetrieveWIP
{
    public List<wip> wips { get; set; }

    [ComVisible(true)]
    public IEnumerable GetWipsCOM() => wips;
}
通过这种方式,C内部的代码可以使用正确的全类型泛型列表,而无需任何更改,VB6或任何其他COM使用者也可以访问数据


COM和VB6支持IEnumerable。ie您将能够通过VB6中GetWipsCOM的结果为每一个进行计算。

VB6!=由于您的c代码dll需要RestSharp,json newtonsoft libs将被添加到您的vb6项目中。但据我所知,这些库不支持VB6环境。您正在尝试使用最新技术回到旧技术环境。所有其他功能都可以正常工作。甚至还有一个登录函数,它将返回一个令牌,并且工作正常。VB将只调用类函数,C将实现RestSharp和json方法。然而,我不认为这是这里的问题。让我重新表述一下我的问题,给定一个基本的C代码,从VB访问类型类属性的正确方法是什么?你能告诉我在“Set getWIP=oIFactory.RetrieveWIPstrSerialNumber”VB6!=由于您的c代码dll需要RestSharp,json newtonsoft libs将被添加到您的vb6项目中。但据我所知,这些库不支持VB6环境。您正在尝试使用最新技术回到旧技术环境。所有其他功能都可以正常工作。甚至还有一个登录函数,它将返回一个令牌,并且工作正常。VB将只调用类函数,C将实现RestSharp和json方法。然而,我不认为这是这里的问题。让我重新表述我的问题,给定一个基本的C代码,从VB访问类型类属性的正确方法是什么?你能告诉我在“Set getWIP=oIFactory.RetrieveWIPstrSerialNumber”中得到了什么对象吗
public class resultRetrieveWIP
{
    public Collection wips { get; set; }
}
public class resultRetrieveWIP
{
    public List<wip> wips { get; set; }

    [ComVisible(true)]
    public IEnumerable GetWipsCOM() => wips;
}