• 一个苦恼了两天的问题,把问题还原如下:以备后查(mfc库中已经定义了DllMain)


    开始在vss_map的stdafx.h包含:

    #include <windows.h>


    // TODO: 在此处引用程序需要的其他头文件
    #include "IVSS_MapDefinition.h"

    #include "IVSS_CoreLibrary.h"
    #pragma comment(lib,"vss_core.lib")

    #include "IVSS_GeoLibrary.h"
    #pragma comment(lib,"vss_geo.lib")

    #include "IVSS_WsLibrary.h"
    #pragma comment(lib,"vss_ws.lib")

    #include "IVSS_SymbolLibrary.h"
    #pragma comment(lib,"vss_symbol.lib")

    ////////////////新加

    #include "IVSS_CarTrackLibrary.h"
    #pragma comment(lib,"vss_cartrack.lib")

    提示错误:

    >e:\最新track修改\trunk\vss\inc\ctrackview.h(17) : error C2061: 语法错误 : 标识符“CDC”
    1>e:\最新track修改\trunk\vss\inc\ctrackview.h(19) : error C2061: 语法错误 : 标识符“CDC”
    1>e:\最新track修改\trunk\vss\inc\ctrackview.h(21) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
    1>e:\最新track修改\trunk\vss\inc\ctrackview.h(21) : error C2143: 语法错误 : 缺少“;”(在“*”的前面)
    1>e:\最新track修改\trunk\vss\inc\ctrackview.h(21) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int

    后来才知道是#include <windows.h>的事情,因为项目不是mfc的,不识别cdc,需要替换为#include <afxwin.h>

    好,替换后问题又来了:

    >mfcs80d.lib(dllmodul.obj) : error LNK2005: _DllMain@12 已经在 vss_map.obj 中定义
    1>   正在创建库 E:\最新track修改\trunk\vss\Debug\vss_map.lib 和对象 E:\最新track修改\trunk\vss\Debug\vss_map.exp
    1>E:\最新track修改\trunk\vss\Debug\vss_map.dll : fatal error LNK1169: 找到一个或多个多重定义的符号

    原来这是由于atl,与mfc中都有main()。所以要把atl的都注释掉~

    // vss_map.cpp : 定义 DLL 应用程序的入口点。
    //

    #include "stdafx.h"


    // #ifdef _MANAGED
    // #pragma managed(push, off)
    // #endif
    //
    //
    // BOOL APIENTRY DllMain( HMODULE hModule,
    //                        DWORD  ul_reason_for_call,
    //                        LPVOID lpReserved
    //       )
    // {
    //     return TRUE;
    // }
    //
    // #ifdef _MANAGED
    // #pragma managed(pop)
    // #endif

    解决问题的来源:

    笔者的写一个组件时,开始之初没有考虑到支持mfc,后来需要支持对话框设置,加入mfc支持,编译不通过,

    1>AudioVista.obj : error LNK2005: _DllMain@12 已经在 mfcs80ud.lib(dllmodul.obj) 定义
    1>Debug\AudioVista.dll : fatal error LNK1169: 找到一个或多个多重定义的符号 

    出现这个提示,根据笔者的猜想,在mfc库已经定义了DllMain这个默认的处理函数,去掉atl生成的DllMain

    将这段代码去掉后,就可以了,省得再去重建工程,加入文件麻烦。

    //#ifdef _MANAGED
    //#pragma managed(push, off)
    //#endif
    //
    ////// DLL 入口点
    //extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
    //{
    // hInstance;
    //    return _AtlModule.DllMain(dwReason, lpReserved);
    //}
    //
    //#ifdef _MANAGED
    //#pragma managed(pop)
    //#endif
    //

    http://203.208.35.101/search?q=cache:Wh34kmIJlmUJ:blog.csdn.net/nxjbill/archive/2007/11/30/1909144.aspx+error+LNK2005:+_DllMain%4012+%E5%B7%B2%E7%BB%8F%E5%9C%A8+%E4%B8%AD%E5%AE%9A%E4%B9%89&hl=zh-CN&ct=clnk&cd=8&gl=cn&st_usg=ALhdy2-gZzCG8WbTCeZbEohcrUVHq5nh0Q

  • 相关阅读:
    MD文件利用标题等级进行分割代码实现
    IDEA插件-Git Commit Template
    IDEA插件-Translation
    IDEA使用-Debug回到上一步
    Java语法糖详解
    MySQL 事务的隔离级别初窥
    Java异常体系概述
    ssh-copy-id三步实现SSH免密登录
    深入理解ThreadLocal
    使用Guava RateLimiter限流入门到深入
  • 原文地址:https://www.cnblogs.com/8586/p/1332642.html
Copyright © 2020-2023  润新知