如何使用visual studio编译c++ dll
How to compile a c++ dll using visual studio?
我有一些c++类,我想编译成一个dll文件。当我试图编译项目时,我收到一个无法解析的外部符号错误:
- 错误LNK2019:在函数tmainCRTStartup中引用的未解析符号_WinMain@16
- 致命错误LNK1120: 1未解决的外部
这是我到目前为止所做的:
我刚刚创建了一个新的win32项目,选择了dll和空项目。然后我将所有的h和cpp文件复制到目录中,并将它们添加到项目中。
此外,我添加了一个文件"DllMain.cpp",其中包含以下代码:
#include <windows.h>
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
由于某些原因,该项目被配置为构建.exe。
但是你可以很容易地修复你的项目。打开属性对话框,选择"配置属性/常规"。在右侧找到"配置类型"项,将其从"应用程序"更改为"动态库"。
还请记住,您需要在所有配置(即调试和发布)上更改此设置。
新建Win32应用程序项目时,在向导中选择"应用程序设置",应用程序类型选择"DLL"。它将以空的DllMain
开头。
你说你这样做了,但它不应该寻找WinMain
。要再次检查您是否真的在构建DLL,请查看项目设置->常规,并检查:
- 配置类型为"动态库(.dll)"
- MFC的使用设置为"使用标准Windows库"
- 使用ATL是"不使用ATL"
这个链接可能会帮助你http://msdn.microsoft.com/en-us/library/799kze2z(v=vs.80).aspx也检查你的项目属性对话框中的链接器设置。如果您使用其他库,请确保在链接器选项卡中设置了它们的路径。
相关文章:
- 挂起和取消挂起一个文件DLL
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 导入库可以跨dll版本工作吗
- 从C++dll访问C#中的一行主要参数
- 链接到自行创建的dll失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- C++:将外部库链接到dll库
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 不同的Visual Studio版本中缺少.dll
- 从DLL中删除类的实例
- 如何包装第三方DLL在R中使用
- 使用c#访问c++dll中带有char*参数的函数时发生AccessViolationException
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 当我使用 C++ 中的 C# dll 来使用 Selenium 时,存在异常处理问题
- Python ctypes:不会按预期加载 dll
- 在 C++/CLI 中将 .NET 事件从一个 DLL 引发到另一个 DLL