Compilation 使用LINK.EXE和C2.EXE手动编译VB6项目

Compilation 使用LINK.EXE和C2.EXE手动编译VB6项目,compilation,linker,vb6,windows-10,Compilation,Linker,Vb6,Windows 10,我希望在尝试编译项目时尽量避免使用VB6.exe应用程序。它倾向于创建*.obj文件,然后崩溃,让我不知道出了什么问题 "c:\Program Files (x86)\Microsoft Visual Studio\VB98\VB6.EXE" /m MyProject.vbp 我想尝试使用LINK.exe和C2.exe来编译我的应用程序。我发现所有的开关等都在这个过程中发挥了作用。我希望有人尝试了一些链接,并取得了成功,这样他们就可以确切地告诉我需要使用哪些开关,以及如何一步一步地创建对象文件

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

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

我想尝试使用
LINK.exe
C2.exe
来编译我的应用程序。我发现所有的开关等都在这个过程中发挥了作用。我希望有人尝试了一些链接,并取得了成功,这样他们就可以确切地告诉我需要使用哪些开关,以及如何一步一步地创建对象文件,然后将它们全部链接到EXE。我最终得到了这个旧的源代码进行编译。我确信我的处境是独一无二的,但我想我会和别人分享希望,如果这种情况发生在他们身上,我会帮助别人找到自己的路

首先,我最终无法编译这个项目来拯救我的生命。首先,它将在IDE中编译,然后仅通过在命令行中运行以下命令

"c:\Program Files (x86)\Microsoft Visual Studio\VB98\VB6.EXE" /m MyProject.vbp
然后,这甚至不起作用,我不得不使用包和部署向导来编译它,这在某些时候是有效的

我想这真的只是最后的偶然。但在某个时候,有东西指向我拥有的一个特定模块文件,该文件用于访问(读/写)注册表。我认为这是在查看日志和windows事件查看器之间进行的。所以我开始思考。。。如果不使用它,它可能会编译。因此,我从项目中删除了模块,尝试编译,然后VB很好地向我展示了由于引用函数不存在而无法工作的每个调用。我也注释掉了所有这些,然后我能够用很少的努力编译,并且它再次变得平滑

因此,这有助于我确定VB到底在关注什么,但它并没有解决下面的问题(我无法编译所有的源代码)。因此,我开始尝试将所有源代码逐一返回到应用程序中,以查看它将在何处中断

  • 我首先将模块文件添加到项目中,然后进行编译

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

    Success!
    
    Success!
    
  • 我设法把所有注释掉的代码行都放回原处。然后我最后一次重新编译

    Success!
    

  • 所以在这一点上,我把一切都恢复到我开始编译之前的状态。现在它的工作没有任何问题

    在使用VB6进行生成时,是否尝试过/out和/outdir标志。您的命令行类似于“c:\ProgramFiles(x86)\Microsoft Visual Studio\VB98\VB6.EXE”/m MyProject.vbp/out c:\output\errorLog.txt/outdir c:\output\。它应该记录您在build.C2.exe中遇到的任何错误。它是编译器的第二个过程和代码生成器。您需要VB6.exe来执行编译过程1。您在“生成”对话框中选择了哪些选项(当您尝试通过IDE编译时)@BillHileman我正在查找该对话框中的所有默认值<代码>编译为本机代码-
    优化快速代码
    DLL基址:&H11000000
    ,没有检查
    高级优化
    @lardymonkey我不知道我可以创建这样的错误日志!!!我会尽快试一试的。谢谢我本来打算接受这个答案,但后来觉得这是个坏主意。我问的问题是一个教程,介绍了如何手动编译VB6项目(没有VB6.exe的帮助)。我只是希望我在回答中的经验能帮助其他人找到解决VB6在试图编译项目时崩溃问题的方法。在这个过程前后看到所有项目文件(包括VBP)之间的差异会很酷。在某个地方,一定有不同的东西。也许不同之处在于其他地方,比如注册表或.vbw文件中……我可能会尝试花一些时间研究一下。如果我这样做了,我会在这个答案后面加上好消息和坏消息。好消息是我有一份非工作和工作项目文件夹的副本。我花了一段时间比较它们,对坏项目进行更改,并试图让它编译,模仿好项目对项目文件的更改。坏消息是,VB6太不可预测了,真是疯了!在某个时刻,如果没有对好的项目进行任何更改,它就会停止编译!唯一能让它再次发挥作用的方法就是重复上面我的回答。我以前很喜欢VB6。现在我希望有一天我可以用c#重写所有东西……听起来注册表中的某些东西可能会“损坏”,然后破坏您的构建?一定是项目文件之外的东西,正在更改。我感觉到你的痛苦!!