在C#中,来自VBA的Type等价于什么?
我问,因为我在Excel中有一些代码试图将其转换为独立的C#应用程序。我有一个函数,它来自一个.dll,它带有一个带有一些字符串和longs作为参数的Type。我将如何在C#中复制它?这甚至可以工作,还是.dll中的功能甚至不能在C#中工作?
我还没有尝试过,因为它都连接到了一个正常工作的数据库,并且我想知道在弄乱某些东西之前它将如何工作。
答案 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
数据类型。相似之处在于,它是一种用户定义的数据类型,其中包含一个或多个各种数据类型的元素(成员),并且可以将这些元素作为类型/结构的字段进行访问。
两者都是值类型,并且通常使用堆栈分配。