有的时候找到的资源是only for .net的。 但如果要在vb里使用,又不想翻译代码。可以考虑把资源写出activeX dll,在vb里使用
步骤如下:
1.在解决方案中添加一个类库项目
2.需要设置类库项目属性->程序集信息->使程序集COM可见
3. 设置该项目的一个属性: 为COM互操作注册, 这样就会在bin目录生成一个*.tlb文件. 这个tlb文件可以用regasm 来注册
例子代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace activeXDemo { public class clsDemo { public int Add( int a, int b) { return a + b; } } } |
编译成dll, 用RegAsm注册控件, 注册接口的参数不能是复杂类型,不能是List<T>,不能是泛型,不能有可变参数,不然会报错
regasm assemblyFile [options]
assemblyFile表示要向COM注册的程序集文件路径
选项 | 说明 |
---|---|
/codebase | 在注册表中创建一个Codebase项。codebase项指定未安装到全局程序集缓存中的程序集的文件路径。如果随后要安装正在注册到全局程序集缓存中的程序集,则不应指定此选项。用/codebase选项指定的assemblyFile参数必须是具有强名称的程序集。 |
/registered | 指定此工具将仅引用已经注册的类型库 |
/unregister或/u | 注销在assemblyFile中找到的可创建类。 |
/?或/help | 显示该工具的命令语法和选项 |
需要注意的一点是在32位系统上要使用C:\windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe
在64位上要使用
C:\windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe
-=================================================
vb加引用。
假如要更改activeDLL,记得要先关掉VB,正在使用的话,build dll时会出现这个错误. build完之后如果改了接口, 重新用RegAsm注册.重新build exe
Unable to delete file "D:\work\demo\bin\Debug\activedemo.tlb". Access to the path 'D:\work\Fdemo\bin\Debug\activedemo.tlb' is denied.
另外可以用VS附加调试到VB6.exe, 这个当vb调用net的dll时,就会触发断点,
VB运行调用dll时,几种取当前目录的写法,返回的值如下: 另外在system32目录下建文件夹的操作不会成功,但也不会报错
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
2018-04-14 把旧系统迁移到.Net Core 2.0 日记(9) -- T4 Template