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