错误LNK 2019和LNK2028在一个类中的一个功能,其他工作正常
我通常在C#中工作,并在这个我的智慧。我使用创建动态链接库。错误LNK 2019和LNK2028在一个类中的一个功能,其他工作正常
如下所示
DeveloperConsoleManager.h
#pragma once
#include "atlstr.h"
#ifdef DEVCONSOLEMANAGER_EXPORTS
#define DEVCONSOLEMANAGER_API __declspec(dllexport)
#else
#define DEVCONSOLEMANAGER_API __declspec(dllimport)
#endif
namespace DeveloperConsoleManager
{
class DeveloperConsoleLogic
{
public:
// Returns a + b
static DEVCONSOLEMANAGER_API double Add(double a, double b);
static DEVCONSOLEMANAGER_API bool CheckforValidFile(CString fileName);
};
}
DeveloperConsoleManager.cpp
// DeveloperConsoleManager.cpp : Defines the exported functions for the DLL application.
//
#include "stdafx.h"
#include "DeveloperConsoleManager.h"
namespace DeveloperConsoleManager
{
double DeveloperConsoleLogic::Add(double a, double b)
{
return a + b;
}
bool DeveloperConsoleLogic :: CheckforValidFile(CString fileName)
{
return false;
}
}
我在使用这些方法在一个cpp文件我已经定义两种方法一个不同的项目(类型:应用程序(.exe))。当我生成解决方案,有以下链接错误
警告1个警告C4273: 'DeveloperConsoleManager :: DeveloperConsoleLogic ::添加':不一致的dll链接E:\ md_69 \ developerconsolemanager \ developerconsolemanager.cpp 10
警告2警告C4273: 'DeveloperConsoleManager :: DeveloperConsoleLogic :: CheckforValidFile':不一致的dll链接E:\ md_69 \ developerconsolemanager \ developerconsolemanager.cpp 16
错误3错误LNK2028:无法解析令牌(0A0004F1)“市民:静态布尔__cdecl DeveloperConsoleManager :: DeveloperConsoleLogic :: CheckforValidFile(ATL :: CStri类在函数“public”中引用了(?CheckforValidFile @ DeveloperConsoleLogic @ DeveloperConsoleManager @@ $$ FSA_NV?$ CStringT @ _WV?$ StrTraitMFC_DLL @ _WV?$ ChTraitsCRT @ _W @ ATL @@@@@ ATL @@@ Z) :无效__thiscall CSaSsiConsoleUi :: UploadSsiCheck(无效) “(?UploadSsiCheck @ CSaSsiConsoleUi @@ $$ FQAEXXZ)E:\ MD_69 \ DeveloperConsoleUI \ SaSsiConsoleUI.obj
错误4错误LNK2019:无法解析的外部符号” 公用:静态布尔__cdecl DeveloperConsoleManager :: DeveloperConsoleLogic :: CheckforValidFile(class ATL :: CStringT >>)“(?CheckforValidFile @ DeveloperConsoleLogic @ DeveloperConsoleManager @@ $$ FSA_NV?$ CStringT @ _WV?$ StrTraitMFC_DLL @ _WV?$ ChTraitsCRT @ _W @ ATL @@@@ (?)UploadSsiCheck(CSASsiConsoleUi @@ $$ FQAEXXZ)E:\ MD_69 \ DeveloperConsoleUI \ SaSsiConsoleUI.obj
函数“public:void __thiscall CSaSsiConsoleUi :: UploadSsiCheck(void)”中引用的@ ATL @错误5错误LNK1120:2解析的外部E:\ MD_69 \调试\ DeveloperConsoleUi.exe
没有为 “添加” 方法没有连接错误。
我已经在链接器 - >输入 - >其他依赖项中包含了“DeveloperConsoleManager.lib”。请帮我弄清楚我到底做错了什么。 我很乐意添加任何所需的附加信息。
感谢@Igor Tandetnik和真棒的东西,那就是互联网,我想通了。我将其添加为答案,以便其他人可能会受益。
问题出在CString上。定义该函数的项目是一个动态链接库(dll),并且正在调用MFC应用程序。现在,问题是,MFC使用CString,而非MFC的DLL使用。
的CString中被定义为:
typedef ATL::CStringT< TCHAR, StrTraitMFC_DLL<TCHAR> > CString;
而被定义为:
typedef CStringT< TCHAR, StrTraitATL<TCHAR> > CString;
这一点,因为你可以清楚地看到是不同的。我使用的解决方法是using CAtlString instead of CString。但是,如果遇到问题,请随时提出任何更好的方法。
_'DeveloperConsoleManager :: DeveloperConsoleLogic :: Add':不一致的dll linkage_ – 2017-10-16 08:43:52
@ manni66对不起,请您详细说明 – RMad9248
修复此问题。也许它修复了其余的问题。 – 2017-10-16 09:22:55