当前位置: 首页 > news >正文

C#和C++在编译过程中的文件区分

1.   .h是头文件(Header File)

用来 声明类、函数、常量等。

通常不包含实际实现,只是“定义接口”

// 示例:math_utils.h#pragma once
int add(int a, int b);      //定义函数名

2.  .cpp是源文件(Source File)
用来实现头文件中声明的函数,类等

// 示例:math_utils.cpp#include "math_utils.h"     //引入头文件int add(int a, int b) {            //实现return a + b;
}

3. 库

3.1 静态库  .lib

把.cpp文件编译成 .lib文件。

示例: math_utils.cpp  --编译-->  math_utils.lib

静态库是“编译时拷进程序里的”

//示例:在另一个程序里使用#include <iostream>
#include "math_utils.h"  // 引用静态库的头文件int main() {std::cout << "3 + 5 = " << Add(3, 5) << std::endl;return 0;
}//提示:需要提前链接库,不然程序不知道Add方法
步骤1.添加库路径
在 Solution Explorer 中右键项目 → 选择 Properties(属性)→ Configuration Properties → Linker → General → Additional Library Directories
步骤2.添加.lib文件
在 Solution Explorer 中右键项目 → 选择 Properties(属性)→ Configuration Properties → Linker → Input

3.2 动态库   .dll

把.cpp文件编译成 .dll文件。

示例: math_utils.cpp  --编译-->  math_utils.dll

动态库是“程序运行时才加载的”

//math_utils.h#pragma once// 这里要加 __declspec(dllexport) / __declspec(dllimport)
#ifdef MATHLIB_EXPORTS
#define MATHLIB_API __declspec(dllexport)
#else
#define MATHLIB_API __declspec(dllimport)
#endifextern "C" MATHLIB_API int Add(int a, int b);//设置宏定义 MATHLIB_EXPORTS,编译后会生成:
//math_utils.dll(动态库)
//math_utils.lib(导入库,用于链接)
//math_utils.cpp#include "math_utils.h"int Add(int a, int b) {return a + b;
}
//main.cpp#include <iostream>
#include "math_utils.h"int main() {std::cout << "7 + 2 = " << Add(7, 2) << std::endl;return 0;
}//编译链接时:
//需要 math_utils.lib(编译时用),操作同上面
//运行时必须放 math_utils.dll 在可执行文件旁边

C#就比较简单了
1. .cs直接就是声明+实现

2. .cs编译后生成一个.dll文件

3. 创建类库项目,定义,实现后编译,就生成了.dll文件,如MyLib.dll

4. 其他项目再 using  MyLib  引入类库

http://www.xdnf.cn/news/870949.html

相关文章:

  • 树莓派上遇到插入耳机后显示“无输入设备”问题
  • 格恩朗椭圆齿轮流量计 精准计量 赋能工业
  • 探索花语的奥秘:全新花语网站上线啦!
  • Elasticsearch中的地理空间(Geo)数据类型介绍
  • PostgreSQL配置文件修改及启用方法
  • ubutu修改网关
  • 将多个分段btsnoop文件合并为一个
  • 低空城市场景下的多无人机任务规划与动态协调!CoordField:无人机任务分配的智能协调场
  • HTML转EXE最新版本2.1.0新功能介绍 - 附CSDN免费下载链接
  • 数据结构与算法:动态规划中根据数据量猜解法
  • 在java 项目 springboot3.3 中 调用第三方接口(乙方),如何做到幂等操作(调用方为甲方,被调用方为乙方)? 以及啥是幂等操作?
  • 【ArcGIS微课1000例】0148:Geographic Imager6.2使用教程
  • Sentry 项目简介
  • 【Zephyr 系列 8】构建完整 BLE 产品架构:状态机 + AT 命令 + 双通道通信实战
  • dxf、dwg中文字矩阵变换
  • Django核心知识点全景解析
  • 网络攻防技术十三:网络防火墙
  • 企业私有化部署DeepSeek实战指南:从硬件选型到安全运维——基于国产大模型的安全可控落地实践
  • Redis命令使用
  • SpringAI(GA):Nacos2下的分布式MCP
  • shell:基础
  • 磐云P10 P057-综合渗透测试-使用反弹木马进行提权获取主机Shell
  • STM32学习之看门狗(理论篇)
  • 10.MySQL索引特性
  • dify中解决docx上传文件报错问题
  • 泰迪杯特等奖案例深度解析:基于量子启发优化与多尺度时空建模的港口物流智能调度系统
  • 如何应对敏捷转型中的团队阻力
  • 【位运算】丢失的数字(easy)
  • Linux进程调度:从时间片到实时任务的交响乐
  • C++——智能指针 unique_ptr