当前位置: 首页 > 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.lqws.cn/news/123571.html

相关文章:

  • 【Web应用】若依框架:基础篇14 源码阅读-后端代码分析-课程管理模块前后端代码分析
  • ubuntu自定义服务自动启动
  • 全志A40i android7.1 调试信息打印串口由uart0改为uart3
  • 在Windows11上安装 Ubuntu WSL
  • Fréchet Inception Distance(FID)
  • es地理信息索引的类型以及geo_point‌和geo_hash的关系
  • 四元数:从理论基础到实际应用的深度探索
  • THUNDER:用“听回去”的方式让数字人说话更像真人
  • 一个小小的 flask app, 几个小工具,拼凑一下
  • BERT:让AI真正“读懂”语言的革命
  • 【Unity】R3 CSharp 响应式编程 - 使用篇(集合)(三)
  • Vue + Element Plus 实战:大文件切片上传 + 断点续传
  • 华为设备OSPF配置与实战指南
  • 【vue3学习】vue3入门
  • MySQL 事务深度解析:面试核心知识点与实战
  • 运维实施40-MGR高可用
  • Android 颜色百分比对照
  • 国产化Word处理控件Spire.Doc教程:Java实现HTML 转Word自动化
  • 四、函数调用包含单个参数之Double类型-mmword,movsd,mulsd,addsd指令,总结汇编的数据类型
  • 测试面试题总结一
  • Hive终极性能优化指南:从原理到实战
  • linux shell脚本硬件定时检测通过邮箱警告管理人员
  • c++提升
  • 【计算机网络】网络层协议
  • skynet monitor线程的作用
  • 【学习笔记】TCP 与 UDP
  • go语言学习 第4章:流程控制
  • FFmpeg avformat_open_input函数分析
  • 量化Quantization初步之--带量化(QAT)的XOR异或pyTorch版250501
  • Hadoop大数据集群深度实践:源码分析、参数调优与自动化运维平台选型全解