c++ 如何生成dll文件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ 如何生成dll文件?相关的知识,希望对你有一定的参考价值。

写完了代码后怎么编译生成dll文件啊!

在VC++中选择新建一个Win32 Dynamic-Link Library。需要建立一个c/c++ head file和一个c/c++ source file并加入工程。头文件中内容为输出函数的声明,源文件中内容为DllMain函数和输出函数的定义。下面是一个最简单的例子。

//dlldemo.h
#ifdef __cplusplus
#define EXPORT extern "C" __declspec(dllexport)
#else
#define EXPORT __declspec(dllexport)
#endif

EXPORT void CALLBACK DllFoo(void) ;

//dlldemo.c
#include <windows.h>
#include "dlldemo.h"

int WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)

return TRUE ;


EXPORT void CALLBACK DllFoo(void)

MessageBox(NULL,TEXT("This function is exported from a DLL"),TEXT("DllFoo"),MB_OK) ;
return ;

头文件预处理中的__declspec是微软增加的“C扩展类存储属性”(C Extended Storage-Class Attributes),它指明一个给出的实例被存储为一种微软特定的类存储属性,可以为thread,naked,dllimport或dllexport. [MSDN原文:The extended attribute syntax for specifying storage-class information uses the __declspec keyword, which specifies that an instance of a given type is to be stored with a Microsoft-specific storage-class attribute (thread, naked, dllimport, or dllexport).] 输出函数必须指明为CALLBACK。 DllMain是dll的入口点函数。也可以不写它。DllMain必须返回TRUE,否则系统将终止程序并弹出一个“启动程序时出错”对话框。 编译链接后,得到动态链接库文件dlldemo.dll和输入库文件dlldemo.lib。
参考技术A 要生成DLL文件么很简单的呀~ 属性 常规 配置类型 选择动态库 DLL 参考技术B 1.新建一个MFC DLL或Win32 DLL工程
2.创建好后里面会有stdafx.h和stdafx.cpp以及$工程名.cpp文件
3.删除$工程名.cpp文件 将你的cpp文件添入工程
4.修改你的cpp文件 添加一句#include "stdafx.h"在代码第一行
5.Build
参考技术C vs工具不是自带便宜的吗!!!!

为啥类库 (dll) 也不生成 lib 文件?

【中文标题】为啥类库 (dll) 也不生成 lib 文件?【英文标题】:Why doesn't Class Library (dll) also produces a lib file?为什么类库 (dll) 也不生成 lib 文件? 【发布时间】:2016-01-18 22:08:15 【问题描述】:

我正在尝试通过 C++ (C++/Cli) 项目创建和使用 C# 库 (dll)。但是,我的 C# 库没有(或产生) .lib 文件。有人告诉我我需要一个 lib 文件,但我不确定如何生成它。

可以查看代码here

我已将 .dll 文件包含在我的 C++ 项目中,但它无法运行。

我收到以下错误:

未知模块中发生“System.IO.FileNotFoundException”类型的未处理异常。附加信息:无法加载文件或程序集“ClassLibrary1,版本=1.0.0.0,Culture=neutral,PublicKeyToken=null”或其其中之一依赖项。系统找不到指定的文件。

我对 .dll 和 .lib 文件比较陌生。 这个问题和我发现的另一个问题here

有关

【问题讨论】:

【参考方案1】:

.NET 程序集(在您的情况下是 C# 库)不是普通的 dll,换句话说,它们不像其他标准(本机)windows dll 那样公开其 API。相反,它们以只有其他 .NET 才能理解的方式公开其 API。

有两种方法可以为 C++ 项目公开 .NET API。

1- 将 C++ 本机项目转换为托管 C++ 项目(即 .NET C++ 程序集),然后您可以将 C# 库作为 .NET 引用添加到 C++ 项目,并将其作为托管库调用。

2- 您可以将 .NET 库转换为 COM+ 库,然后从 C++ 中将其用作 COM+ 依赖项。

简而言之,通过 .lib 文件直接使用 .NET API 并不是 .NET 的特性

【讨论】:

以上是关于c++ 如何生成dll文件?的主要内容,如果未能解决你的问题,请参考以下文章

为啥类库 (dll) 也不生成 lib 文件?

VS2013编写了个c++的dll动态库,怎么填写文件说明,版本,版权这些信息

Unity与DLL(C++)☀️四生成DLL文件,Unity完成调用测试

Unity与DLL(C++)☀️四生成DLL文件,Unity完成调用测试

c++调用dll导出函数

Visual C++ 2010 Express 不生成 DLL 文件