自己制作引用dll也是新手,在不懈查询和试验下,最后问了下人终于成功了。但是网上关于VB6 dll的文章很少,所以写下来和大家分享。
VB6制作dll的内容这里就不再重复了。
第一次VB6制作成了dll,然后注册引用,发现大部分内容没有!还以为是dll内的类模块有错,所以只显示了一个类模块。原来是类模块的属性没有设置。
类模块也有属性:在属性窗口中找到Instancing然后将private私有改为MultiUse常用的选择。如果选用GlobalMultiUse就会让其中的函数像全局函数,有点静态类的感觉。
然后从XP32位机拷贝dll到另一台计算机上,这台是64位的WIN11计算机,安装的Visual Studio 2022准备使用这个dll。直接浏览地址引用vb6的dll我没有成功,显示下面内容:
于是开启了注册dll的道路。
这个是以管理员身份运行cmd,然后注册了VBarry.dll和VB6221107.dll。注册成功会弹窗显示成功。(如何管理员运行注册dll网上有)VBarry.dll和VB6221107.dll我把它们都拷贝到了C:\Windows\SysWOW64文件夹下,据说这个是运行32位dll的地方。其它地方注册后能不能用我没试验。下面是注册语句:
一切完成后我准备引用dll。新建项目一个VB.NET和一个C#的。现在点击引用如下图。
点击引用后会出现下面的界面,然后找到你注册的dll 点击打上小勾,点击确定。
现在我们成功引用了dll。
但是我们运行的时候会出问题,C#的内容。
using VBArry;//引用VB6的dll:VBArry
namespace WinFormsDll20221107
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
double[] D = { 1, 2, 3, 5, 4, 3, 2, 1 };
S4_Array1D A = new S4_Array1D();//S4_Array1D是VBArry中的一个类模块
textBox1.Text += A.Array1DMax(D);
}
}
}
S4_Array1D A = new S4_Array1D();这句会报错,出现没有注册类0*80040154(REGDB_E_CLASSNOTREG)的错误提示!
我查了很多网上的资料,没一个能够解决这个问题的,还是问了下编程群里的人,这个问题才解决了,编绎器改成X86的。下面就是改的过程
最后运行结果正常显示为5.
成功了,但是目标平台成了X86这样我做出来的程序是32位的?那以后还怎么弄,我需要制作64位的程序!!如果有人知道怎么弄成64位程序能够引用32位的VB6 dll一定要告诉我,太复杂就算了。