【问题标题】:Manually compile VB6 project using LINK.EXE and C2.EXE使用 LINK.EXE 和 C2.EXE 手动编译 VB6 项目
【发布时间】:2018-08-30 22:47:48
【问题描述】:

我想在尝试编译我的项目时尽量避免使用 VB6.exe 应用程序。它倾向于创建 *.obj 文件,然后崩溃让我不知道出了什么问题。

"c:\Program Files (x86)\Microsoft Visual Studio\VB98\VB6.EXE" /m MyProject.vbp

我想尝试使用LINK.exeC2.exe 来编译我的应用程序。我在所有开关等的过程中发现了一个真正的great article located here。我希望有人尝试了一些链接并成功,这样他们就可以准确地告诉我我需要使用哪些开关以及如何创建的分步过程目标文件,然后将它们全部链接到 EXE。

【问题讨论】:

  • 您在使用 VB6 进行构建时是否尝试过 /out 和 /outdir 标志。您的命令行类似于 "c:\Program Files (x86)\Microsoft Visual Studio\VB98\VB6.EXE" /m MyProject.vbp /out c:\output\errorLog.txt /outdir c:\output\ 。这应该会记录您在构建中遇到的任何错误。
  • C2.exe 是编译器的第二遍和代码生成器。您需要 VB6.exe 来执行编译的第 1 步。
  • 您在构建对话框中选择了哪些选项(当您尝试通过 IDE 进行编译时)
  • @BillHileman 我正在寻找所有默认值。 Compile to Native Code-Optimize for Fast Code, DLL Base Address: &H11000000, Advanced Optimizations 没有检查。
  • @lardymonkey 我不知道我可以创建这样的错误日志!!!我会尽快试一试。谢谢!

标签: compilation linker vb6 windows-10


【解决方案1】:

我最终得到了这个旧的源代码来编译。我确信我的情况是独一无二的,但我想我会分享,希望如果发生这种情况,我会帮助其他人找到自己的路。

首先,我无法编译这个项目以最终挽救我的生命。起初它会在 IDE 中编译,然后只需在命令行中运行以下命令...

"c:\Program Files (x86)\Microsoft Visual Studio\VB98\VB6.EXE" /m MyProject.vbp

然后那甚至都行不通,我不得不使用包和部署向导来编译它,这在某些时候可以工作。

我认为它最终只是命中或错过。但是在某些时候,某些东西指向了我用来访问(读/写)注册表的特定模块文件。我认为这是在查看日志甚至可能是 Windows 事件查看器等之间。所以我开始思考......如果不使用它,它可能会编译。所以我从项目中删除了模块,尝试编译,然后 VB 很好地向我展示了每个调用都不起作用,因为引用的函数不存在。我也把所有这些都注释掉了,然后我可以毫不费力地编译,它又顺利了!

所以这帮助我确定了 VB 发生了什么,但它并没有解决下划线问题(我无法编译我的所有源代码)。所以我开始尝试将所有源代码一一返回到应用程序中,看看它会在哪里中断。

  1. 我先将模块文件添加到项目中,刚刚编译。

    Success!
    
  2. 然后我尝试取消注释我注释掉的第一件事(引用该模块中的函数),然后重新编译。

    Success!
    
  3. 我设法将所有被注释掉的代码行全部找回来,并将它们恢复到原来的样子。然后我最后一次重新编译。

    Success!
    

所以在这一点上,我已经将一切恢复到我开始尝试编译之前的确切方式。现在它完全没有问题了!

【讨论】:

  • 我打算接受这个作为答案,然后认为这是一个坏主意。我问的问题是一个教程,展示了如何手动编译 VB6 项目(没有 VB6.exe 的帮助)。我只是希望我在回答中的经验可以帮助其他人找到解决 VB6 在尝试编译项目时崩溃的问题。
  • 在此过程之前和之后看到所有项目文件(包括 VBP)之间的差异会很酷。某处必须有所不同。也许差异会在其他地方,例如在注册表或 .vbw 文件中......
  • 我可能会尝试花一些时间研究一下。如果我这样做,我会附加到这个答案。
  • 好消息和坏消息。好消息是我有一份非工作和工作项目文件夹的副本。我花了一段时间比较它们,对坏项目进行更改,并试图让它编译模仿来自好项目的项目文件的更改。坏消息是,VB6 如此不可预测是令人抓狂的!在没有对好项目进行任何更改的某个时候,它停止了编译!让它再次工作的唯一方法是重复我上面的答案说明。我以前很喜欢VB6。现在我生活在可以用 c# 重写所有内容的那一天......
  • 听起来注册表中的某些内容可能会“损坏”然后破坏您的构建?必须是正在更改的项目文件之外的东西。我感觉到你的痛苦!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-11
  • 1970-01-01
  • 2022-07-25
  • 1970-01-01
  • 2022-08-16
  • 2014-04-06
  • 1970-01-01
相关资源
最近更新 更多