在 ActiveX dll 项目中创建列表(对象),在 Visual Basic 6.0 中用于 c# 项目
Posted
技术标签:
【中文标题】在 ActiveX dll 项目中创建列表(对象),在 Visual Basic 6.0 中用于 c# 项目【英文标题】:Creating a List(object) in an ActiveX dll project, in Visual Basic 6.0 to use in c# project 【发布时间】:2012-03-10 05:21:30 【问题描述】:我想在 Visual Basic 6.0 的 ActiveX 组件项目中创建一个列表。然后我会得到
来自 c# 项目的列表。
谢谢
【问题讨论】:
好的。什么问题? 【参考方案1】:使用 c#,您可以创建自己的控件。你有不同的可能性来做到这一点。
-
从
System.Windows.Forms.Control
派生为类并添加您的功能。这是最灵活但也最复杂的方法。
从现有控件中派生为类,该控件接近您想要执行的操作并对其进行调整(例如,通过覆盖 OnPaint
)。
将UserControl
添加到您的项目中。您可以在 UserControl
上放置其他控件,就像在表单上放置控件一样。
您可以在主程序集 (.exe) 中执行此操作;但是,如果您在类库 (.dll) 中执行此操作,则可以像使用 ActiveX 控件一样使用它。在 .NET 中,您不需要 ActiveX 控件的“魔力”。控件只是派生自Control
的类。
我经常从ListBox
派生我自己的控件并覆盖OnPaint
,以便通过添加图标、使用不同颜色或在多行上显示文本以不同的方式显示项目。
这是我以这种方式自定义的ListBox
示例
编辑:
您是否正在寻找 VB6 的 Collection
类型的替代品?在 C# 或 VB.NET 中,您使用 System.Collections.Generic
命名空间的集合。 List<T>
用于列表,Dictionary<TKey,TValue>
用于存储键/值对。
列表示例:
var list = new List<string>();
list.Add("Hello");
list.Add("World");
Console.WriteLine(list[0]); // ==> "Hello"
Console.WriteLine(list[1]); // ==> "World"
foreach (string s in list)
Console.WriteLine(s);
// Output: Hello
// World
键值对示例:
var dict = new Dictionary<string,int>();
dict.Add("Sunday", 1);
dict.Add("Monday", 2);
dict.Add("Tuesday", 3);
dict.Add("Wednesday", 4);
dict.Add("Thursday", 5);
dict.Add("Friday", 6);
dict.Add("Saturday", 7);
Console.WriteLine(dict["Wednesday"]); // ==> 4
int daynum;
if (dict.TryGetValue("Christmas", out daynum))
Console.WriteLine("Christmas has the day number 0.", daynum);
else
Console.WriteLine("Christmas is not a weekday.");
编辑:
要在 .NET 中使用通过 VB6 创建的 ActiveX,您需要 .NET SDK 中提供的命令行实用程序 TlbImp
。像这样称呼它
然后您可以像使用任何其他 .NET dll 一样使用MyCsharp.dll
。见C# and ActiveX DLLs by Anand Narayanaswamy。
【讨论】:
嗨 Olivier,List 的意思就像 Visual Basic 6 中的对象列表。我在 Visual Basic 6 中创建了 ActiveX dll 项目。我在 do 循环中有记录。我会将这些记录添加到一个列表中,然后当我在 c# 项目中引用这个 dll(在 VB6 中创建)时,我将使用记录列表。 Bertan,你应该更加努力地问这个问题。你想达到什么目的?您能否提供一个您迄今为止在 VB6 中编写的代码示例?有人对您的问题投了反对票,因为它难以理解。不过,我更新了我的答案。与 VB6 相比,你可以用 c# 做更多的事情。尝试使用 VB6 解决 c# 问题对我来说似乎很奇怪。 嗨,奥利维尔。我使用 VB6,因为我有一个软件开发工具包,用于指纹设备,用 VB6 编写。该 Sdk 在 C# 中无法直接正常工作。所以我尝试用VB6将该sdk包装到一个ActiveX dll项目中。然后我将在我的 C# 项目中使用该 dll。 我添加了关于如何在 c# 中使用 ActiveX 的说明。您的问题可能应该是“如何在 .NET 中使用用 VB6 创建的 ActiveX?”并且与列表无关。 那个标题不是我想要的,我仍然想将指纹设备记录列表从 VB6(ActiveX Project) 端传递到 C# 端,但这对我来说也是一个问题。我使用 TlbImp 将我的非托管代码转换为托管 .net 代码,它是成功的,但是在 c# 端,当我将我的 dll 导入 c# 项目并尝试使用我的方法时,它会抛出一个 InvalidCastException ->以上是关于在 ActiveX dll 项目中创建列表(对象),在 Visual Basic 6.0 中用于 c# 项目的主要内容,如果未能解决你的问题,请参考以下文章
使用 CreateObject ActiveX 组件无法创建带有注册类库的对象