增加打包脚本
This commit is contained in:
parent
5dd9a70fb4
commit
2b3fcfcf1b
@ -69,102 +69,56 @@ Console.WriteLine($"大气湍流强度: {turbulence:E2}");
|
|||||||
### 项目配置
|
### 项目配置
|
||||||
|
|
||||||
1. 在 Visual Studio 中创建新的 C++ 项目
|
1. 在 Visual Studio 中创建新的 C++ 项目
|
||||||
2. 将 AirTransmission.dll 复制到项目的输出目录(或可执行文件所在目录)
|
2. 将以下文件复制到项目目录:
|
||||||
3. 在代码中使用 LoadLibrary 和 GetProcAddress 动态加载 DLL 函数
|
- `AirTransmission.dll` - 动态链接库文件
|
||||||
|
- `include/AirTransmission.h` - 头文件
|
||||||
|
3. 在项目设置中添加 include 目录
|
||||||
|
4. 在代码中包含头文件并使用导出函数
|
||||||
|
|
||||||
### 代码示例
|
### 代码示例
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
#include <windows.h>
|
#include "AirTransmission.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
// 定义函数指针类型
|
|
||||||
typedef double (__cdecl *CalculateTransmittanceFunc)(
|
|
||||||
double wavelength,
|
|
||||||
double distance,
|
|
||||||
double temperature,
|
|
||||||
double humidity,
|
|
||||||
double pressure,
|
|
||||||
double visibility,
|
|
||||||
int weatherType
|
|
||||||
);
|
|
||||||
|
|
||||||
typedef double (__cdecl *CalculateAtmosphericTurbulenceFunc)(
|
|
||||||
double wavelength,
|
|
||||||
double distance,
|
|
||||||
double temperature,
|
|
||||||
double humidity,
|
|
||||||
double pressure,
|
|
||||||
double visibility,
|
|
||||||
int weatherType
|
|
||||||
);
|
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
// 加载 DLL
|
|
||||||
HMODULE hDll = LoadLibrary(L"AirTransmission.dll");
|
|
||||||
if (hDll == NULL) {
|
|
||||||
std::cout << "无法加载 DLL" << std::endl;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取函数地址
|
|
||||||
auto calculateTransmittance = (CalculateTransmittanceFunc)GetProcAddress(hDll, "CalculateTransmittance");
|
|
||||||
auto calculateTurbulence = (CalculateAtmosphericTurbulenceFunc)GetProcAddress(hDll, "CalculateAtmosphericTurbulence");
|
|
||||||
|
|
||||||
if (calculateTransmittance == NULL || calculateTurbulence == NULL) {
|
|
||||||
std::cout << "无法获取函数地址" << std::endl;
|
|
||||||
FreeLibrary(hDll);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 设置参数
|
// 设置参数
|
||||||
double wavelength = 1.064; // 波长(微米)
|
double wavelength = 1.064; // 波长(微米)
|
||||||
double distance = 1000.0; // 距离(米)
|
double distance = 1000.0; // 距离(米)
|
||||||
double temperature = 20.0; // 温度(摄氏度)
|
double temperature = 20.0; // 温度(摄氏度)
|
||||||
double humidity = 0.65; // 相对湿度(0-1)
|
double relativeHumidity = 0.65; // 相对湿度(0-1)
|
||||||
double pressure = 101.325; // 大气压力(kPa)
|
double pressure = 101.325; // 大气压力(kPa)
|
||||||
double visibility = 10000.0; // 能见度(米)
|
double visibility = 10000.0; // 能见度(米)
|
||||||
int weatherType = 0; // 天气类型(0=晴天)
|
int weatherType = WeatherType::Clear; // 天气类型(晴天)
|
||||||
|
|
||||||
// 计算透过率
|
// 计算透过率
|
||||||
double transmittance = calculateTransmittance(
|
double transmittance = CalculateTransmittance(
|
||||||
wavelength, distance, temperature, humidity,
|
wavelength, distance, temperature, relativeHumidity,
|
||||||
pressure, visibility, weatherType
|
pressure, visibility, weatherType
|
||||||
);
|
);
|
||||||
std::cout << "透过率: " << transmittance * 100.0 << "%" << std::endl;
|
std::cout << "透过率: " << transmittance * 100.0 << "%" << std::endl;
|
||||||
|
|
||||||
// 计算湍流影响
|
// 计算湍流影响
|
||||||
double turbulence = calculateTurbulence(
|
double turbulence = CalculateAtmosphericTurbulence(
|
||||||
wavelength, distance, temperature, humidity,
|
wavelength, distance, temperature, relativeHumidity,
|
||||||
pressure, visibility, weatherType
|
pressure, visibility, weatherType
|
||||||
);
|
);
|
||||||
std::cout << "湍流强度: " << turbulence << std::endl;
|
std::cout << "湍流强度: " << turbulence << std::endl;
|
||||||
|
|
||||||
// 卸载 DLL
|
|
||||||
FreeLibrary(hDll);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## 注意事项
|
### 注意事项
|
||||||
|
|
||||||
1. 所有浮点数输入都使用 double 类型
|
1. 确保 AirTransmission.dll 在程序运行目录下
|
||||||
2. 波长单位为微米(μm)
|
2. 头文件中已定义了所有必要的类型和函数
|
||||||
3. 距离单位为米(m)
|
3. 使用 WeatherType 枚举来指定天气类型
|
||||||
4. 温度单位为摄氏度(℃)
|
4. 所有浮点数参数都使用 double 类型
|
||||||
5. 压力单位为千帕(kPa)
|
5. 参数单位说明:
|
||||||
6. 相对湿度范围为 0-1
|
- 波长:微米(μm)
|
||||||
7. 确保输入参数在合理范围内:
|
- 距离:米(m)
|
||||||
- 波长:0.2-20 μm
|
- 温度:摄氏度(℃)
|
||||||
- 距离:> 0 m
|
|
||||||
- 温度:-40 到 +60 ℃
|
|
||||||
- 相对湿度:0-1
|
- 相对湿度:0-1
|
||||||
- 压力:80-120 kPa
|
- 压力:千帕(kPa)
|
||||||
8. C++ 调用注意事项:
|
- 能见度:米(m)
|
||||||
- 确保 DLL 文件在正确的路径下
|
|
||||||
- 所有导出函数使用 __cdecl 调用约定
|
|
||||||
- 处理好错误情况(DLL 加载失败、函数获取失败等)
|
|
||||||
- 天气类型枚举值:
|
|
||||||
- 0 = 晴天 (Clear)
|
|
||||||
- 1 = 多云 (Cloudy)
|
|
||||||
- 2 = 雨天 (Rain)
|
|
||||||
|
|||||||
64
include/AirTransmission.h
Normal file
64
include/AirTransmission.h
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// 天气类型枚举
|
||||||
|
enum WeatherType {
|
||||||
|
Clear = 0, // 晴天
|
||||||
|
Cloudy = 1, // 多云
|
||||||
|
Rain = 2, // 雨天
|
||||||
|
Fog = 3, // 雾天
|
||||||
|
Dust = 4, // 沙尘
|
||||||
|
Snow = 5 // 雪天
|
||||||
|
};
|
||||||
|
|
||||||
|
// 导出函数声明
|
||||||
|
#ifdef _WIN32
|
||||||
|
#define DLLEXPORT __declspec(dllimport)
|
||||||
|
#else
|
||||||
|
#define DLLEXPORT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// @brief 计算大气透过率
|
||||||
|
/// @param wavelength 波长(微米)
|
||||||
|
/// @param distance 距离(米)
|
||||||
|
/// @param temperature 温度(摄氏度)
|
||||||
|
/// @param relativeHumidity 相对湿度(0-1)
|
||||||
|
/// @param pressure 大气压力(kPa)
|
||||||
|
/// @param visibility 能见度(米)
|
||||||
|
/// @param weatherType 天气类型(参见 WeatherType 枚举)
|
||||||
|
/// @return 大气透过率(0-1)
|
||||||
|
DLLEXPORT double __cdecl CalculateTransmittance(
|
||||||
|
double wavelength,
|
||||||
|
double distance,
|
||||||
|
double temperature,
|
||||||
|
double relativeHumidity,
|
||||||
|
double pressure,
|
||||||
|
double visibility,
|
||||||
|
int weatherType
|
||||||
|
);
|
||||||
|
|
||||||
|
/// @brief 计算大气湍流影响
|
||||||
|
/// @param wavelength 波长(微米)
|
||||||
|
/// @param distance 距离(米)
|
||||||
|
/// @param temperature 温度(摄氏度)
|
||||||
|
/// @param relativeHumidity 相对湿度(0-1)
|
||||||
|
/// @param pressure 大气压力(kPa)
|
||||||
|
/// @param visibility 能见度(米)
|
||||||
|
/// @param weatherType 天气类型(参见 WeatherType 枚举)
|
||||||
|
/// @return 湍流影响系数(0-1)
|
||||||
|
DLLEXPORT double __cdecl CalculateAtmosphericTurbulence(
|
||||||
|
double wavelength,
|
||||||
|
double distance,
|
||||||
|
double temperature,
|
||||||
|
double relativeHumidity,
|
||||||
|
double pressure,
|
||||||
|
double visibility,
|
||||||
|
int weatherType
|
||||||
|
);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
BIN
publish/AirTransmissionLibrary-1.0.0.zip
Normal file
BIN
publish/AirTransmissionLibrary-1.0.0.zip
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
70
scripts/pack_release.sh
Executable file
70
scripts/pack_release.sh
Executable file
@ -0,0 +1,70 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# 版本号
|
||||||
|
VERSION="1.0.0"
|
||||||
|
PACKAGE_NAME="AirTransmissionLibrary-${VERSION}"
|
||||||
|
|
||||||
|
# 创建临时目录和发布目录
|
||||||
|
rm -rf temp publish
|
||||||
|
mkdir -p temp/${PACKAGE_NAME}/{lib,include,doc}
|
||||||
|
mkdir -p publish
|
||||||
|
|
||||||
|
# 编译项目
|
||||||
|
echo "Building project..."
|
||||||
|
dotnet build src/AirTransmission/AirTransmission.csproj -c Release
|
||||||
|
|
||||||
|
# 复制必要文件
|
||||||
|
echo "Copying files..."
|
||||||
|
cp src/AirTransmission/bin/Release/net8.0/AirTransmission.dll temp/${PACKAGE_NAME}/lib/
|
||||||
|
cp src/AirTransmission/bin/Release/net8.0/AirTransmission.xml temp/${PACKAGE_NAME}/lib/
|
||||||
|
cp include/AirTransmission.h temp/${PACKAGE_NAME}/include/
|
||||||
|
|
||||||
|
# 生成文档
|
||||||
|
echo "Generating documentation..."
|
||||||
|
docfx metadata docfx.json
|
||||||
|
docfx build docfx.json
|
||||||
|
wkhtmltopdf --enable-local-file-access \
|
||||||
|
--page-size A4 \
|
||||||
|
--margin-top 20 \
|
||||||
|
--margin-bottom 20 \
|
||||||
|
--margin-left 20 \
|
||||||
|
--margin-right 20 \
|
||||||
|
--footer-left "大气传输计算库 API 文档" \
|
||||||
|
--footer-right "[page]/[topage]" \
|
||||||
|
--footer-spacing 8 \
|
||||||
|
--user-style-sheet docs/custom.css \
|
||||||
|
_site/docs/introduction.html \
|
||||||
|
_site/docs/API.html \
|
||||||
|
_site/api/AirTransmission.AtmosphericTransmittanceCalculator.html \
|
||||||
|
_site/api/AirTransmission.WeatherCondition.html \
|
||||||
|
_site/api/AirTransmission.WeatherType.html \
|
||||||
|
_site/docs/usage_examples.html \
|
||||||
|
temp/${PACKAGE_NAME}/doc/AirTransmission-API-Doc.pdf
|
||||||
|
|
||||||
|
# 创建 README
|
||||||
|
cat > temp/${PACKAGE_NAME}/README.txt << EOL
|
||||||
|
大气传输计算库 v${VERSION}
|
||||||
|
|
||||||
|
目录结构:
|
||||||
|
lib/ - 库文件
|
||||||
|
AirTransmission.dll - 主库文件
|
||||||
|
AirTransmission.xml - API 文档(用于 IDE 智能提示)
|
||||||
|
include/ - 头文件
|
||||||
|
AirTransmission.h - C++ 头文件
|
||||||
|
doc/ - 文档
|
||||||
|
AirTransmission-API-Doc.pdf - API 文档
|
||||||
|
|
||||||
|
使用说明请参考 doc/AirTransmission-API-Doc.pdf
|
||||||
|
EOL
|
||||||
|
|
||||||
|
# 打包
|
||||||
|
echo "Creating package..."
|
||||||
|
cd temp
|
||||||
|
zip -r ../publish/${PACKAGE_NAME}.zip ${PACKAGE_NAME}
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
# 清理临时文件
|
||||||
|
echo "Cleaning up..."
|
||||||
|
rm -rf temp
|
||||||
|
|
||||||
|
echo "Package created at publish/${PACKAGE_NAME}.zip"
|
||||||
Loading…
Reference in New Issue
Block a user