level 1
我用了两个控件,都是它内置的,
mscomctl.ocx 表格控件
comdlg32.ocx 对话框控件
但迷你版好像找不到直接封装到里面的办法?有人也遇到过没?怎么解决?还是说换一个版本就可以,在生成编译时可以勾选控件。
手动注册并以管理员身份运行命令提示符除外,这个知道的
2026年01月31日 13点01分
1
level 1
你的内置是什么意思?嵌在exe里面吗?
mscomctl.ocx一般和msoffice版本会有冲突,所以vb6版本的mscomctl.ocx一般慎用。
comdlg32.ocx太古老了。
所以推荐 vbccr.ocx (这是开源的,是unicode版本,在github上,用来替代vb6的几乎绝大多数控件)
写完程序后 用manifest文件,编译成res,作为资源文件嵌入到exe中。这样你写的vb6程序都是 绿色软件(activeXdll和ocx都是免注册。),不需要安装程序。
用manifest方式,你也依然可以用老旧的mscomctl.ocx和comdlg32.ocx(记得带上),但不要注册。
2026年02月01日 00点02分
2
谢谢。这个错误通常发生在VB6中,特别是Windows 10/11系统上。MSCOMCTL.OCX确实是VB6常用的控件,但它不是Windows系统内置的,需要单独注册。谢谢你的提醒,我还要研究一下,刚接触VB6。
2026年02月01日 09点02分
@gofu171 层主不是跟你说用manifest绿化吗?都绿化那还需要注册?绿化之后的exe就只加载自身相对目录下的dll和ocx,不会再去鸟系统注册表。manifest文件你就可以理解为它是应用私有注册表。
2026年02月02日 00点02分
VBCCR本身就是开源的,没必要用ocx,也不需要用manifest,直接源码级替换vb的ocx控件。
2026年06月02日 00点06分
level 12
OCX跟EXE放同目录
编译时 工程属性-通用-启动对象设 Sub Main
新建个标准模块
实现 Sub Main 过程
sub main()
shell "regsvr32 xxx.ocx" '注册控件
form1.show
end sub
2026年02月01日 10点02分
4
当然,编译后程序需管理员权限启动才能注册成功
2026年02月01日 10点02分
@👨🏿🦱 麻烦了解一下manifest绿化方案,用了这个之后exe就强行只加载自身相对目录,不再依赖注册表(你也可以把manifest理解为exe级别的注册表)。
2026年02月02日 01点02分
这不是更麻烦
2026年02月06日 01点02分
level 5
将vb6的源码转移到twinbasic上,两者的代码是兼容的。twinbasic支持64位,longlong,编译后是独立exe,无需额外的控件。
2026年02月02日 09点02分
5
level 1
卸载了重新安装正式版VB6
再装个ofice2003
就好用了.
2026年06月10日 00点06分
6
level 1
可以用Enigma Virtual Box 封装为单独EXE,但是可能会被杀毒软件报毒。还有就是在有些电脑上要用管理员身份运行才能注册成功
2026年06月20日 03点06分
7
吧务
level 12
补充个坑:不建议在程序启动时 Shell regsvr32 去自动注册 OCX,这样需要管理员权限,还会污染目标机器的系统注册表,卸载也麻烦。
VB6 的 EXE 本身不能把 ActiveX OCX 真正“编进 exe 里”。常见路线有三种:
1. 走安装包,把依赖 OCX 正确部署和注册;
2. 做免注册 COM,用 manifest + OCX 放同目录;
3. 尽量换成不依赖 OCX 的实现,或者用 VBCCR 源码级控件替代一部分常用控件。
如果目标是发给别人直接运行,优先考虑第 2 或第 3 种。
2026年06月22日 16点06分
8