关于VC命令行编译,待解决问题

 前言
    最近作毕业设计遇到了的问题:

    整个毕业设计工程,我是采用COM组件技术进行开发的
    对于其中一些简单的组件,我懒着启动庞大的VS 2003 IDE环境。
    所以干脆设置了几个系统环境变量,直接使用命令行进行编译,
    稍大一点的工程,写上个MAKEFILE文件,倒也方便快捷。
    但是使用过程中却遇到了许多棘手的问题:

背景
    我使用的编译器是VC2003
    cl.exe版本号:
        Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
        Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.
    link.exe版本:
        Microsoft (R) Incremental Linker Version 7.10.3077
        Copyright (C) Microsoft Corporation.  All rights reserved.

问题
    5月12号:
        需要一个Dialog,与用户交流配置信息和启动选项
        在编写了资源文件 MyUI.rc和resource.h后
        编写测试程序,主函数如下:

        //
        // win32入口点函数
        int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
        {
                 DialogBoxParam(hInstance,
                 MAKEINTRESOURCE(IDD_DLG_SHOW),
                          NULL, DLGPROC(MainDialogProc), NULL);
                 return TRUE;
        }

        编译:cl /O2 /Ot /W3 /nologo /c TextMain.cpp
        链接:link  /subsystem:windows TextMain.obj user32.lib kernel32.lib gdi32.lib advapi32.lib

        顺利通过,但是程序运行时没有出现Dialog,而是直接返回了。钻研一天,无果!

        最后的办法:改用VC IDE进行编译,顺利通过测试

    5月14号:
        编译一个COM组件的DLL服务器程序
        因为注册COM组件需要获得DLL入口点地址
        所以编写DLL源文件如下:

        //
        // 文件中 略去无关代码n行
        //
        static HMODULE g_hModule = NULL ;   // DLL module handle

        ///
        //
        // DLL module information
        //
        BOOL WINAPI DllMain(HINSTANCE hInstDll,
                            DWORD dwReason,
                            void* lpReserved)
        {
                if (dwReason == DLL_PROCESS_ATTACH)
                {
                        g_hModule = hInstDll ;
                        DisableThreadLibraryCalls(hInstDll);
                }
                return TRUE ;
        }

        MAKEFILE文件如下:

        #
        # Flags
        #
        CPP_FLAGS=/c /MTd /Zi /Od /D_DEBUG /EHsc
        DLL_LINK_FLAGS=/DLL /DEBUG

        LIBS=UUID.lib Advapi32.lib Ole32.lib
        # 略掉n行
        DZCComponent3.dll : DZCComponent3.obj GUIDs.obj Registry.obj CMPNT1.def
        link $(DLL_LINK_FLAGS) DZCComponent3.obj GUIDs.obj Registry.obj
                $(LIBS) /DEF:DZCComponent3.def
        regsvr32 -s CMPNT1.dll
        # 略掉n行
        #end

        命令行:nmake
               
LINK : fatal error LNK2023: 错误的 dll 或入口点 'msobj71.dll'
                NMAKE : fatal error U1077: “link” : 返回代码“0x7e7”

        钻研一天,无果!
        最后的办法:改用VC IDE进行编译,顺利通过测试

结论
    VS 2003的集成IDE隐藏了很多底层编译、链接过程的细节,苦于每日繁忙不得精研之
    所以作文以记之,望来日得闲,仔细琢磨,勿忘!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值