简单的用python调用C++ 的例子

这是一个简单的例子.使用ctypes,因为现在blender等3d软件 写插件只能用内置的python api,没有内置的C++ api,要用C++写插件,只能使用 py调用 C++的方式 实现.

下面编译为c_float.dll(因为使用了中文变量,所以最好用vc编译)

#include<stdio.h>

#define  EXC  extern "C" __declspec(dllexport)//●●定义这个接口,可以被py调用
EXC void Δ二维数组(int Lci__[])//定义一个数组并传入py
    {
    Lci__[0]=8;Lci__[1]=6;
    }
    
EXC void Δ一维int(int &ci__)//定义一个int值并传入py
    {
    ci__=7;
    }
    
#if(0)(<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
编译这个cpp文件为dll,可以通过vs,
也可以通过notepad++的插件NppExec,编译成dll的命令行为:

//-----RELEASE x64版本-------------------------------------------------
cmd /k chdir /d $(CURRENT_DIRECTORY)   &cl  $(FILE_NAME)     /TP     /W3     /Fo:$(NAME_PART).obj  /c  &EXIT

cmd /k chdir /d $(CURRENT_DIRECTORY)   &link    /SUBSYSTEM:WINDOWS  /MACHINE:X64      /DLL   $(NAME_PART).obj    /OUT:$(NAME_PART).dll    &EXIT

#endif>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

下面是python脚本.

运行直接就调用 了上面编译的dll.

from ctypes import*
from ctypes.wintypes import *

dll路径="c_float.dll";#载入 把c_float.cpp 编译成的dll文件
DLL=None;

def Δ载入dll(dll路径):
    dll = CDLL(dll路径);
    return dll;
    
def Δ卸载dll():
    global DLL;
    if(DLL):
        windll.kernel32.FreeLibrary.argtypes = [HMODULE];
        windll.kernel32.FreeLibrary(DLL._handle);#释放dll
        DLL=None;
    
DLL=Δ载入dll(dll路径);
print("DLL",DLL);

Lci_=(c_int*2)();
DLL.Δ二维数组(Lci_);#从dll里传入数组的值并打印
for ci in Lci_:
    print("ci L==",ci);#√ ci== 8,ci== 6
    
ci_=c_int();
DLL.Δ一维int(byref(ci_));#从dll里以引用 方式 传入int的值,如果要通过引用传值就用byref(ci_),如果只通过值传 可以直接用 ci_
print("ci_==",ci_);#Χci_== c_long(7)
print("ci_.value==",ci_.value);#√ci_== 7

   

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值