1. 使用ctypes直接调用c/c++动态链接库
- linux 下动态链接库可有gcc直接生成
- windows下可以由vs生成
(1) 新建动态链接库项目
(2) 在cpp文件中加入
#define DLLEXPORT extern "C" __declspec(dllexport)
//放在 #include "stdafx.h" 之后
在 需要导数的函数前加DLLEXPORT
,例如:
DLLEXPORT int sum(int a, int b) {
return a + b;
}
(3) 生成动态链接库
- python调用方法
import ctypes
import os
class NuclearExplosion:
path = os.path.dirname(os.path.dirname(__file__))
dll = ctypes.cdll.LoadLibrary(path + "/NuclearExplosion/ccdll/x64/Debug/ccdll.dll")
fRE = ctypes.c_double(6370) # 地球半径,单位:km
PI = ctypes.c_double(3.14)
fPhi0 = ctypes.c_double(44.7) # 爆点磁倾角
fT = ctypes.c_double(1) # 爆后时间,单位:min
fW = ctypes.c_double(1) # 爆炸当量,单位:MT TNT
fH = ctypes.c_double(200) # 观测点高度,单位:km
fD = ctypes.c_double(1000) # 爆点与观测点的地面距离,单位:km
fH0 = ctypes.c_double(60) # 爆点高度,单位:km
fkTx = ctypes.c_double(1.5)
# 爆炸地点和时间
fLat = ctypes.c_double(30) # 爆点纬度,单位:°,北纬为正,南纬为负
fLon = ctypes.c_double(114) # 爆点经度,单位:°,东经为正,西经为负
fmmdd = ctypes.c_int(321) # 爆炸日期
fyyyy = ctypes.c_int(2000) # 爆炸年份
fhour = ctypes.c_double(10) # 爆点时间,小时:分钟:秒
fminute = ctypes.c_double(20) # 爆炸时间,分钟
fsecond = ctypes.c_double(0) # 爆点时间,秒
calculate=dll.res(fW, fH, fD, fH0, fT, fLat, fLon, fmmdd, fyyyy, fhour, fminute, fsecond, fPhi0)