未解析的外部符号_declspec(dllimport)
Unresolved external symbol _declspec(dllimport)
我已经在Visual Studio中为控制台应用程序创建了一个DLL。在我的DLL中,我有一个名为Dialog_MainMenu的类,它有一个*.cpp文件和一个*.h文件。
以下错误消息:
错误9错误LNK2001:未解析的外部符号"__declspec(dllimport)public:静态枚举Dialog_MainMenu::GAME_STATES Dialog_MainMenu::CurrentGameState"(_imp?CurrentGameState@Dialog_MainMenu@@2W4GAME_STATES@1@A) C:\Users\Kevin\Desktop\C++projects\development_testion\The IntensiveAdventure\Dialogs\Dialog_MainMenu.obj对话框
我有点不明白。只有当我在头文件中向原型添加枚举时才会出现这种情况。
头文件:
#ifdef DIALOG_MAINMENU_EXPORTS
#define DIALOG_MAINMENU_API __declspec(dllexport)
#else
#define DIALOG_MAINMENU_API __declspec(dllimport)
#endif
class Dialog_MainMenu {
public:
static DIALOG_MAINMENU_API enum GAME_STATES {
MAINMENU, GAME, OPTIONS, CREDITS, QUIT
};
static DIALOG_MAINMENU_API GAME_STATES CurrentGameState;
DIALOG_MAINMENU_API GAME_STATES GetState();
};
(不知道问题是否在这里,所以我只添加它)cpp文件一般:
//Get state
Dialog_MainMenu::GAME_STATES Dialog_MainMenu::GetState() {
// Code..
}
//Switching state
Dialog_MainMenu::CurrentGameState = Dialog_MainMenu::GAME_STATES::GAME;
我真的很感激任何帮助或至少一些建议,在那里我可以了解更多关于这个问题的信息。
您需要在全局范围内的cpp文件中定义静态成员。
Dialog_MainMenu::GAME_STATES Dialog_MainMenu::CurrentGameState;
或者,也可以为其指定一些初始值。
Dialog_MainMenu::GAME_STATES Dialog_MainMenu::CurrentGameState = Dialog_MainMenu::GAME_STATES::GAME;
编辑:
我已经在Visual Studio中为控制台应用程序创建了一个DLL。在我的DLL中,我有一个名为Dialog_MainMenu的类,它有一个*.cpp文件和一个*.h文件。
好的,当你编译dll时,你正在导出类型。因此,您需要在dll的.cpp
文件中define
静态成员。您还需要确保在编译器设置中启用了DIALOG_MAINMENU_EXPORTS
的定义。这将确保导出类型。
现在,当您将控制台应用程序与dll链接时,您将#include
dll的标头,并且不会在编译器设置中启用DIALOG_MAINMENU_EXPORTS
的任何定义(只保留默认设置)。这将使编译器理解,现在您正在将类型从dll导入控制台应用程序。
我希望现在一切都清楚了。
检查是否使用.dll添加了对项目的引用(它解决了我的问题)右键单击项目>添加>引用>(带有.dll的项目)
导出静态类成员时出现问题:
如果将类定义中的静态数据成员声明为dllexport,则定义必须出现在同一程序中的某个位置(与非类外部链接一样)。
但我通常使用的是访问方法。静态函数方法链接良好。
//.h file
class Dialog_MainMenu {
public:
static DIALOG_MAINMENU_API enum GAME_STATES {
MAINMENU, GAME, OPTIONS, CREDITS, QUIT
};
static GAME_STATES CurrentGameState;
DIALOG_MAINMENU_API GAME_STATES GetState();
static DIALOG_MAINMENU_API GAME_STATES& GetCurrentState();
};
//.cpp file
GAME_STATES& Dialog_MainMenu ::GetCurrentState()
{
return CurrentGameState;
}
- LibPrivoxy: 未解析的外部符号 __declspec(dllimport) int __stdcall Sta
- error dllimport 函数的定义不允许在一个特定的联合中,而其他类、结构和联合将按预期导出
- 绕过 Windows 中的 __declspec(dllimport) 到 Linux 项目的转换
- GetProcAddress vs __declspec( dllimport )
- C# DllImport 调用非托管C++函数回调
- 未解析的外部符号"__declspec(dllimport)与 Spdlog c++ 库
- 为什么MSVC(Visual C++)需要单独的dllimport和dllexport属性,而gcc不需要
- 使用 dllimport 代替 dllexport
- 在.NET Core中是否有与DllImport等效的Linux?
- C ++:DECLSPEC,静态库和DLL
- 使用 (c++11) 声明类型时放置 __declspec(dllimport) 关键字的位置
- 使用dllimport函数时程序崩溃
- VC 链接器错误使用Dllimport/DLLEXPORT宏将标题包括在多个项目中
- 如何在C#dllimport中指定C 变体返回类型
- C 到Csharp String与Dllimport通过,丢失的口音
- 挂钩 winapi 函数显示我 dllimport 错误
- 使用dllimport属性导入的函数参数
- C#dllimport意外崩溃
- How to DllImport char*
- dllimport类型问题