Tag: 用户定义的类型

使用Linq返回自定义类的列表

我有一个Author.cs类: public class Author { public Author() { } public int _AuthorID { get; set; } public string _AuthorName { get; set; } public List _Papers { get; set; } } 另一类Paper.cs : public class Paper { public Paper() { } public int _PaperID { get; set; } public List _CoAuthors { get; set; } […]

使用C#中的复杂用户定义类型(UDT)调用VB6 DLL函数

我正在编写一个C#应用程序来调用第三方VB6 DLL。 我在References-> COM选项卡中添加了对VB6 DLL的引用。 DLL中的特定方法采用VB6 UDT(用户定义类型)作为参数。 此UDT在COM的自动生成的.NET包装器中显示为结构。 该结构具有许多子UDT /结构以及VBA.Collection类型的成员(如.NET元数据所示)。 它还有常规数据类型,如string,short,double,int等。 我在我的C#代码中初始化这个结构为: udtEmployee udtEmpData = default(udtEmployee); 我也试过了 udtEmpData = new udtEmployee(); 如果我没有使用default或new初始化它,我无法编译我的C#代码,因为编译器抱怨使用未分配的变量。 我需要传递这个结构作为参考。 我是这样做的: clsEmployee.SetData(ref udtEmpData); 在调用VB6 DLL的这个方法时,我收到错误: 错误:尝试读取或写入受保护的内存。 这通常表明其他内存已损坏。 原因是什么,解决方案是什么? 注意,我无法更改VB6 DLL,因为我没有其源代码。 我正在使用VS 2005。 编辑1: 这是一个完整的背景: 有一个本地开发的ERP产品,它支持使用VB6进行附加开发。 它有一个配置文件,它指定要加载的附加DLL的名称。 然后,这些插件将显示在ERP应用程序的菜单中。 在菜单上单击,ERP调用名为StartAddOn()的函数,该函数应存在于VB6 DLL中。 我想在C#中开发附加组件,因此我开发了一个带有StartAddOn方法的简单VB6插件,该方法又将控制权传递给我的.NET DLL。 .NET DLL使用ERP公开的业务类,并来回传递数据对象。 在.NET DLL中,我添加了对ERP供应商发布的DLL的COM引用。 所以架构是这样的:ERP-> VB6 AddOn和StartAddOn方法 – > .NET DLL->使用ERP供应商发布的COM […]