我已经按照msdn文档做了所有的事情,但是我的函数仍然没有被导出。
LINK1
LINK2
LINK3
以下是我所拥有的(从dll导入的2个项目、dll和app)如下(短版本):
dll函数.h
#prgma once
#ifdef COMPILE_DLL
#define EXPORT __declspec(dllexport)
#else
#define EXPORT __declspec(dllimport)
#endif // COMPILE_DLL
namespace wsl
{
EXPORT bool PointInTriangle(int x1, int y1, int x2, int y2, int x3, int y3, int x, int y);
}
dll函数.cpp
#include "functions.h"
namespace wsl
{
bool PointInTriangle(int x1, int y1, int x2, int y2, int x3, int y3, int x, int y)
{
// implementation...
return true;
}
}
dll dllmain.cpp
#include <Windows.h>
BOOL APIENTRY DllMain(
[[maybe_unused]] HMODULE hModule,
DWORD ul_reason_for_call,
[[maybe_unused]] LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
注:
dll项目中还有其他几个头文件和cpp文件,都在编译中,但没有导出函数。
应用程序main.cpp
#include "functions.h"
int main()
{
wsl::PointInTriangle(0, 0, 20, 0, 10, 30, 10, 15);
return 0;
}
程序输出:
2>main.obj:错误LNK2019:未解析的外部符号
“\uu declspec(dllimport)布尔cdecl”
wsl::pointincirclesector(int,int,int,float,float)“
(?函数中引用的pointincirclesector@wsl@ya\nhhhmm@z)
main 2>main.obj:错误LNK2019:未解析的外部符号
“\uu declspec(dllimport)布尔cdecl”
wsl::点Intriangle(int,int,int,int,int,int,int,int,int)
(?在函数中引用的pointintriangle@wsl@ya\nhhhhhh@z)
main 2>main.obj:错误LNK2019:未解析的外部符号
“\uu declspec(dllimport)布尔cdecl”
wsl::PointInEllipse(int,int,int,int,int,int)“
(?函数main中引用的pointinellipse@wsl@@ya\u nhhhhh@z)
2>main.obj:错误LNK2019:未解析的外部符号
“\uu declspec(dllimport)布尔cdecl”
wsl::PointInCircle(int,int,int,int,int)“
(?在函数main中引用的pointincrcle@wsl@@ya@nhhhh@z)
2>main.obj:错误LNK2019:未解析的外部符号
“\uu declspec(dllimport)布尔cdecl”
wsl::PointInRectangle(int,int,int,int,int,int)“
(?函数中引用的pointinrectangle@wsl@@ya\nhhhhh@z)
主2>C:\users\user\source\repos\windowsuperlibrary\x64\debug
dll\mathsample.exe:致命错误LNK1120:5个未解析的外部
2>已完成生成项目“mathsample.vcxproj”--失败。
你能解释一下这里有什么问题吗?
我已经在DLL上运行了垃圾箱/出口,并且可以确认没有导出任何函数。
COMPILE_DLL
宏当然是在dll项目中定义的。
我确实在我的项目中包含了导入库。
头文件和cpp文件中的命名空间名称相同。