【发布时间】:2018-03-27 16:17:48
【问题描述】:
我通常在 c# 中工作,但我对此一无所知。我使用Walkthrough: Creating and Using a Dynamic Link Library (C++) 创建了一个动态链接库。
我已经定义了两种方法,如下所示
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::Add':不一致的 dll 链接 e:\md_69\developerconsolemanager\developerconsolemanager.cpp 10
警告 2 警告 C4273: 'DeveloperConsoleManager::DeveloperConsoleLogic::CheckforValidFile' : 不一致的 dll 链接 e:\md_69\developerconsolemanager\developerconsolemanager.cpp 16
错误 3 错误 LNK2028: 未解析的令牌 (0A0004F1) "public: static bool __cdecl DeveloperConsoleManager::DeveloperConsoleLogic::CheckforValidFile(class ATL::CStringT > >)" (?CheckforValidFile@DeveloperConsoleLogic@DeveloperConsoleManager@@$$FSA_NV?$ CStringT@_WV?$StrTraitMFC_DLL@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z) 在函数 "public: void __thiscall CSaSsiConsoleUi::UploadSsiCheck(void)" (?UploadSsiCheck@CSaSsiConsoleUi@@$ $FQAEXXZ) E:\MD_69\DeveloperConsoleUI\SaSsiConsoleUI.obj
错误 4 错误 LNK2019:无法解析的外部符号“public: static bool __cdecl DeveloperConsoleManager::DeveloperConsoleLogic::CheckforValidFile(class ATL::CStringT > >)”(?CheckforValidFile@DeveloperConsoleLogic@DeveloperConsoleManager@@$$FSA_NV?$CStringT@ _WV?$StrTraitMFC_DLL@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z) 在函数“public: void __thiscall CSaSsiConsoleUi::UploadSsiCheck(void)”(?UploadSsiCheck@CSaSsiConsoleUi@@$$FQAEXXZ ) E:\MD_69\DeveloperConsoleUI\SaSsiConsoleUI.obj
错误 5 error LNK1120: 2 unresolved externals E:\MD_69\Debug\DeveloperConsoleUi.exe
“添加”方法没有链接器错误。
我已经在 Linker -> Input -> Additional Dependencies 中包含了“DeveloperConsoleManager.lib”。请帮我找出我到底做错了什么。 我很乐意添加所需的任何其他信息。
【问题讨论】:
-
'DeveloperConsoleManager::DeveloperConsoleLogic::Add' : 不一致的 dll 链接
-
@manni66 很抱歉,请您详细说明一下
-
修复它。也许它可以解决剩下的问题。
-
@manni66 警告是由于项目属性中的预处理器定义不正确。解决了,但是链接器错误仍然存在
-
CString是一个宏,可以根据项目设置扩展到许多不同的东西。我怀疑这两个模块是用不同的设置构建的,并且不同意CString的含义。
标签: c++ visual-c++ linker