CMakeLists.txt

project(aaa)
add_library(aaa SHARED aaa.cpp)
add_executable(bbb bbb.cpp)
target_link_libraries(bbb aaa)

aaa.h

#pragma once

#ifndef AAA_AAA_H
#define AAA_AAA_H
#endif #ifdef BUILD_AAA_DLL
#define IO_AAA_DLL __declspec(export)
#else
#define IO_AAA_DLL __declspec(import)
#endif IO_AAA_DLL class father
{
private:
const double PI = 3.14;
public:
void hello(void);
/* 该函数用于介绍 dll 的接口
*
*/
double * ma(double *array, int arrayLen, int maLen);
/* 该函数用于计算 ma 值
* array 传入数组
* arrayLen 数组长度
* maLen 计算天数
*/
};

aaa.cpp

#define BUILD_AAA_DLL

#include "aaa.h"
#include <iostream> using namespace std; IO_AAA_DLL void father::hello(void)
{
cout << "+----------------------------------+" << endl;
cout << "|Hello from class.father.hello() |" << endl;
cout << "| --Made by DengChaohai|" << endl;
cout << "+----------------------------------+" << endl; } double * father::ma(double *array, int arrayLen, int maLen)
{
int n = maLen;
// 保存计算天数
double ma[arrayLen];
// 用于保存 ma 值
while(arrayLen >= maLen && maLen >0)
// 传入数组长度要大于计算天数
{
double sum = 0;
for(int i = maLen - n; i < maLen; i++)
// 计算长度不变,但 ma 值计算要一步步移动,
{
sum = sum + array[i];
}
ma[maLen - 1] = sum / n;
// 简单的平均值算法
cout << "wma[" << maLen - 1 << "] = " << ma[maLen - 1] << endl;
maLen++;
}
return ma;
// 返回数组指针,是否调用再说
}

bbb.cpp

#include "aaa.h"
#pragma comment(a, "C:\Users\Perelman\.CLion2016.1\system\cmake\generated\aaa-4d5bae38\4d5bae38\Debug\libaaa.a") #include <iostream>
using namespace std; template <typename t> int getArrayLen(t &array)
// 应用模版,动态定义数据类型
{
return sizeof(array) / sizeof(array[0]);
} int main()
{
father child;
child.hello();
double open[] = {0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.20, 0.21, 0.22, 0.23};
double *p = child.ma(open, getArrayLen(open), 1);
cout << *(p + 4);
return 0;
}

bbb.py

from ctypes import *
h = windll.LoadLibrary('C:\\Users\\Perelman\\.CLion2016.1\\system\\cmake\\generated\\aaa-4d5bae38\\4d5bae38\\Debug\\libaaa.dll')
h._ZN6father5helloEv()
'''调用函数 hello,此函数名由 depends 工具获得'''
PyList = [0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.20, 0.21, 0.22, 0.23]
'''python 的 list 数据'''
CArray = (c_double*len(PyList))(*PyList)
'''转成 c 的 数组格式'''
h._ZN6father2maEPdii(byref(CArray), 13, 3)
'''调用函数 ma,参数 1 的指针用 byref 取'''

cmake 静态调用 c++ dll 的类的一个例子(Clion IDE)[更新1:增加1.模版的应用,2.ma 的算法]的更多相关文章

  1. cmake 静态调用 c++ dll 的类的一个例子(Clion IDE)

    CMakeLists.txt project(aaa) add_library(aaa SHARED aaa.cpp) add_executable(bbb bbb.cpp) target_link_ ...

  2. C# 中静态调用C++dll 和C# 中动态调用C++dll

    在最近的项目中,牵涉到项目源代码保密问题,由于代码是C#写的,容易被反编译,因此决定抽取核心算法部分使用C++编写,C++到目前为止好像还不能被很好的反编译,当然如果你是反汇编高手的话,也许还是有可能 ...

  3. [转]在C#中调用C语言函数(静态调用Native DLL,Windows & Microsoft.Net平台)

    原文:https://blog.csdn.net/yapingxin/article/details/7288325 对于不太了解.Net的人,如果想要了解.Net,我必须给他介绍P/Invoke.P ...

  4. Maven-打包jar指定main函数所在类的一个例子

    问题描述:maven打包jar时,由于带main方法的类没有被加入manifest中,导致执行java -jar mvn-jar-1.0-SNAPSHOT.jar时,会提示没有主清单属性. 解决办法: ...

  5. C#调用C++ DLL 文件

    说来惭愧,都注册一年多了,却没有发表过一篇正式的博文,中间很多学习的过程也没有记录下来.如今到了一个新的环境,也有了学习的机会,一定要把每天的收获记录一下. 要做的东西需要引用C++编写的DLL,刚开 ...

  6. BCB如何编写,调用动态链接库DLL

    一 编写动态链接库DLL DLL简称动态链接库,是Windows中程序的重要组成部分.想象一下,一个程序需要多人共同完成开发,怎么个共同法?这时我们就要考虑把程序分为好几个模块,团队每一个成员开发一个 ...

  7. dll静态调用和动态调用

    动态链接库有2种连接方式,一种是通过库直接加入(又叫隐式加载或载入时加载),一种是在运行时加入.后者很好理解,比如LoadLibrary(),GetProcAddress()获取想要引入的函数,使用完 ...

  8. 【VB技巧】VB静态调用与动态调用dll详解

    本文“[VB技巧]VB静态调用与动态调用dll详解”,来自:Nuclear'Atk 网络安全研究中心,本文地址:http://lcx.cc/?i=489,转载请注明作者及出处! [[请注意]]:在以下 ...

  9. C++调用DLL有两种方法——静态调用和动态调用

    C++调用DLL有两种方法——静态调用和动态调用 标签: dllc++winapinullc 2011-09-09 09:49 11609人阅读 评论(0) 收藏 举报  分类: cpp(30)  [ ...

随机推荐

  1. 使用D3绘制图表(3)--添加坐标轴和文本标签

    上一篇是曲线的绘制,这样仅仅只是有一条线,完全先是不出数据想要表现的内容,于是我们要添加坐标系,添加坐标系和画线类似. 1.还是没有变化的html页面 <!DOCTYPE html> &l ...

  2. Gson解析json数据

    1.解析单个对象 JSON字符串如下 [ { "formatDate":"2015-10-28", "date":"2015\u5 ...

  3. MyBatis_ibatis和mybatis的区别【转】

    1. ibatis3.*版本以后正式改名为mybaits,它也从apache转到了google code下:也就是说ibatis2.*,mybatis3.*. 2. 映射文件的不同 ibatis的配置 ...

  4. NSMutableURLRequest和NSURLConnection用Post方式上传照

    需求:上传一张照片和内容,内容包括:用户编辑的内容.经纬度.地点等等,就是类似发一个说说.这就是一个很平常的功能,实现的方式想必各位能想到很多. 接下来我想用系统的NSURLConnection来实现 ...

  5. 控件(进度类): RangeBase, Slider, ProgressBar, ProgressRing

    1.RangeBase(基类) 的示例Controls/ProgressControl/RangeBaseDemo.xaml <Page x:Class="Windows10.Cont ...

  6. C# 时间比较大小

    1.时间比较大小 DateTime   t1   =   new   DateTime(100);     DateTime   t2   =   new   DateTime(20);       ...

  7. namespace for c++

    namespace中文意思是命名空间或者叫名字空间,传统的C++只有一个全局的namespace,但是由于现在的程序的规模越来越大,程序的分工越来越细,全局作用域变得越来越拥挤,每个人都可能使用相同的 ...

  8. an important difference between while and foreach on Perl

    while (<STDIN>) { } # will read from standard input one line at a time foreach (<STDIN>) ...

  9. Android复习资料

    转载:http://blog.csdn.net/huachao1001/article/details/53156582 在10月份开始就没有再参与校招了,面试过程真的很累,有时现场等面试一等就是几个 ...

  10. js-JavaScript高级程序设计学习笔记3

    第五章 引用类型 1.使用new操作符和Date构造函数创建日期对象. 2.创建特定日期有两个方法--Date.parse()和Date.UTC().后者小时数为0时显示时间是8点,应该是因为本地是东 ...