C#中VBA的Type语句等效什么?

时间:2019-07-01 09:01:33

标签: c# excel vba

在C#中,来自VBA的Type等价于什么?

我问,因为我在Excel中有一些代码试图将其转换为独立的C#应用​​程序。我有一个函数,它来自一个.dll,它带有一个带有一些字符串和longs作为参数的Type。我将如何在C#中复制它?这甚至可以工作,还是.dll中的功能甚至不能在C#中工作?

我还没有尝试过,因为它都连接到了一个正常工作的数据库,并且我想知道在弄乱某些东西之前它将如何工作。

3 个答案:

答案 0 :(得分:2)

您说您在VBA中使用Type来将数据传递到某些DLL中包含的函数。看到一些代码会有所帮助,但是通常使用该技术来调用(Windows API或第三方)DLL,并期望使用某些C型结构。

在C#中,您将使用P/Invoke来调用非托管DLL中的函数,并且对于DLL所需的复杂类型,通常会使用struct。也可以使用class,但是有some subtleties to be aware of

一个简单的例子可以在这个答案中找到:

如果您的DLL是Windows API的一部分,则可以使用http://pinvoke.net/查找功能和数据结构的即用型C#声明。

答案 1 :(得分:1)

链接文档中的示例将被重写为:

struct StateData 
{
    int[] CityCode;
    string County;
}

var Washington = new StateData[100];

尽管有时您必须初始化CityCode。在VBA中,您可以隐式执行此操作,但在C#中,您必须编写类似以下内容的

foreach (var w in Washington) w.CityCode = new int[100];

答案 2 :(得分:1)

最接近的将是Struct数据类型。相似之处在于,它是一种用户定义的数据类型,其中包含一个或多个各种数据类型的元素(成员),并且可以将这些元素作为类型/结构的字段进行访问。
两者都是值类型,并且通常使用堆栈分配。