博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

开始在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