cmake 静态调用 c++ dll 的类的一个例子(Clion IDE)[更新1:增加1.模版的应用,2.ma 的算法]
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 的算法]的更多相关文章
- cmake 静态调用 c++ dll 的类的一个例子(Clion IDE)
CMakeLists.txt project(aaa) add_library(aaa SHARED aaa.cpp) add_executable(bbb bbb.cpp) target_link_ ...
- C# 中静态调用C++dll 和C# 中动态调用C++dll
在最近的项目中,牵涉到项目源代码保密问题,由于代码是C#写的,容易被反编译,因此决定抽取核心算法部分使用C++编写,C++到目前为止好像还不能被很好的反编译,当然如果你是反汇编高手的话,也许还是有可能 ...
- [转]在C#中调用C语言函数(静态调用Native DLL,Windows & Microsoft.Net平台)
原文:https://blog.csdn.net/yapingxin/article/details/7288325 对于不太了解.Net的人,如果想要了解.Net,我必须给他介绍P/Invoke.P ...
- Maven-打包jar指定main函数所在类的一个例子
问题描述:maven打包jar时,由于带main方法的类没有被加入manifest中,导致执行java -jar mvn-jar-1.0-SNAPSHOT.jar时,会提示没有主清单属性. 解决办法: ...
- C#调用C++ DLL 文件
说来惭愧,都注册一年多了,却没有发表过一篇正式的博文,中间很多学习的过程也没有记录下来.如今到了一个新的环境,也有了学习的机会,一定要把每天的收获记录一下. 要做的东西需要引用C++编写的DLL,刚开 ...
- BCB如何编写,调用动态链接库DLL
一 编写动态链接库DLL DLL简称动态链接库,是Windows中程序的重要组成部分.想象一下,一个程序需要多人共同完成开发,怎么个共同法?这时我们就要考虑把程序分为好几个模块,团队每一个成员开发一个 ...
- dll静态调用和动态调用
动态链接库有2种连接方式,一种是通过库直接加入(又叫隐式加载或载入时加载),一种是在运行时加入.后者很好理解,比如LoadLibrary(),GetProcAddress()获取想要引入的函数,使用完 ...
- 【VB技巧】VB静态调用与动态调用dll详解
本文“[VB技巧]VB静态调用与动态调用dll详解”,来自:Nuclear'Atk 网络安全研究中心,本文地址:http://lcx.cc/?i=489,转载请注明作者及出处! [[请注意]]:在以下 ...
- C++调用DLL有两种方法——静态调用和动态调用
C++调用DLL有两种方法——静态调用和动态调用 标签: dllc++winapinullc 2011-09-09 09:49 11609人阅读 评论(0) 收藏 举报 分类: cpp(30) [ ...
随机推荐
- Java GC收集器配置说明
根据Java GC收集器具体分类,我们可以看出JVM根据需求不同提供了三种选择:串行收集器.并行收集器.并发收集器. 串行收集器只适用于小数据量的情况,我们主要了解一下并行收集器和并发收集器.默认情况 ...
- ubuntu14.04切换root用户
打开命令窗口(CTRL+ALT+T),输入:sudo -s -->接着输入管理密码, -->已经切换到root用户
- javascript 数组实例
在遍历数组时, 如果想要排除 null / undefined 和 不存在的元素时,代码如下: for ( var i = 0; i < a.length; i++ ){ //跳过null / ...
- java-测试synchronized使用xxx.class和this使用的区别
synchronized测试1 写两个线程调用同一个方法,在其中分别做一个class和this的调用,看结果 1.xx.class public class Test{ public static v ...
- 绘制图形与3D增强技巧(五)----多边形图元的使用及其他
1.注意多边形图元中的多边形只能是平面的,而且必须为凸多边形,且多边形的边不能弯曲 2.细分和边界,可以人为设置边界边和非边界边 glEdgeFlag(true)//接下来所有点均为边界边起点 glE ...
- 60.Android通用流行框架大全
转载:https://segmentfault.com/a/1190000005073746 Android通用流行框架大全 1. 缓存 名称 描述 DiskLruCache Java实现基于LRU的 ...
- python-学习笔记1-面向对象编程
1.面向对象最重要的概念就是类(Class)和实例(Instance),类是抽象的模板,而实例是根据类创建出来的一个个具体的"对象",每个对象都拥有相同的方法,但各自的数据可能不同 ...
- jdbc实现事务
//conn需要自己获取,这里我用的时springjdbcTemplate Connection conn = null; PreparedStatement pstm = null; try { c ...
- JSR303注解
Annotation 属于Bean Validation 规范 应用位置 作用 对Hibernate Core中的元数据的影响 @AssertFalse yes field/property 检查被标 ...
- 一款可以下拉搜索html下拉框控件
直接上图,组件不错,支持静态和动态搜索,这个只是在原控件上自己修改样式后的,这里主要记录一下,在修改别人控件时,应该如何去封装代码: 原控件:http://ivaynberg.github.com/s ...



