python通过swig调用c++dll时指针的用法

当Python和C++的接口涉及到缓冲区时,可以在Python中创建缓冲区,再将缓冲区的指针传给C++函数(通过创建额外的函数进行转换)。实例如下:

Python端:

1.获取str表示的二进制数据(读取文件等)。

2.利用ctypes包中的create_string_buffer(str)函数创建缓冲区。

3.获取int表示的缓冲区地址,利用addressof(buf)函数,buf为2中创建的缓冲区对象。

4.利用编写的额外转换函数int2voidp(address)函数将int转换为C++的void*,address为3中获取的int表示的缓冲区地址。

5.将得到的void*对象传给C++函数。

C++端:

1.利用Python传来的void*进行调用,也可以转换为char*等。

时间: 2024-08-17 10:33:03

python通过swig调用c++dll时指针的用法的相关文章

Windows下python使用SWIG调用C++ dll (转)

关于C# 调用 C dll时,抓获C的异常

最近一直被C# 调用native code时的内存错误,各种错误所困扰.而且在.net 4.0中非托管代码的异常不能被托管代码抓获,导致程序直接crash. 最终找到了.net 的方法.MSDN有关于expection 的详细解释. 1. 在.net 3.5中是可以抓取AccessViolationException这个C崩溃的异常的,因此可以尝试使用这个.net 3.5重新编译 2.在.net 4,4.5中可以尝试在app.config 文件中加上如下的配置, <configuration>

2015.3.5 VS2005调用VC6 dll 时结构参数的传递

结构只能以地址方式进行传递,dll只能传递结构不能传递类 VS端: [DllImport(@"D:\程序\VC程序\MfcDllspace\Debug\space.dll")] private static extern bool PassStruct(IntPtr skintptr); [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] public struct sngk

2015.5.9 C#编写DLL及C#调用C#DLL

过程比C#调用VC++dll简单. 一.创建DLL 新建工程,类型选择类库,生成的结果就是dll 注意:在项目属性-应用程序中,注意三个地方,程序集名称和默认命名空间可以调整,但要一致,别的程序调用此DLL时,可通过using命名空间,而后类名+函数名调用.输出类型保持默认的"类库"不变. 此DLL中可以应用VC创建的DLL,但此时本DLL属性只能是X86.调用vc++dll方法还是用 [DllImport("space.dll")] public static e

C#调用dll时的类型转换总结

C++(Win 32) C# char** 作为输入参数转为char[],通过Encoding类对这个string[]进行编码后得到的一个char[] 作为输出参数转为byte[],通过Encoding类对这个byte[]进行解码,得到字符串 C++ Dll接口: void CplusplusToCsharp(in char** AgentID, out char** AgentIP); C#中的声明: [DllImport("Example.dll")] public static

无法将类型为“Excel.ApplicationClass”的 COM 对象强制转换为接口类 型“Excel._Application”。此操作失败的原因是对 IID 为“{000208D5 -0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (异常来 自 HRESULT:

无法将类型为“Excel.ApplicationClass”的 COM 对象强制转换为接口类 型“Excel._Application”.此操作失败的原因是对 IID 为“{000208D5 -0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错. (异常来 自 HRESULT:0x80029C4A (TYPE_E_CANTLOADLIBRARY)) 经过多般折腾,还是没什么更好的办法.

python调用Ant构建时根据构建状态来决定命令行退出状态

在使用python执行Ant构建时遇到的问题: 使用os.system()调用Ant构建时,不论构建成功还是失败(BUILD SUCCESSFUL/BUILD FAILED),命令行的总是正常退出 要解决问题: 首先想到的是获取ant命令的返回值,根据返回值来决定命令行的退出状态(0或非0,0代表正常退出) 查阅相关资料,得知python调用系统命令的函数有:os.system.os.popen.commands.getstatusoutput/getstatus/getoutput.subpr

绝对好文C#调用C++DLL传递结构体数组的终极解决方案

C#调用C++DLL传递结构体数组的终极解决方案 时间 2013-09-17 18:40:56 CSDN博客相似文章 (0) 原文  http://blog.csdn.net/xxdddail/article/details/11781003 在项目开发时,要调用C++封装的DLL,普通的类型C#上一般都对应,只要用DllImport传入从DLL中引入函数就可以了.但是当传递的是结构体.结构体数组或者结构体指针的时候,就会发现C#上没有类型可以对应.这时怎么办,第一反应是C#也定义结构体,然后当

BCB6 调用C# DLL

最近项目涉及第三方接口调用.第三方是用C#实现的WCF服务.而我们的程序是使用的BCB6开发.因此,打算将与WCF的通讯包含在C#的类库中,给BCB6调用.BCB6 是无法直接调用C#的DLL,但可以通过C#编写一个COM组件,然后BCB调用这个COM组件来调用. 用C#编写COM 大体步骤是 新建一个类库项目 设置Assemblyinfo.cs 设置项目属性 编写代码 using System; using System.Collections.Generic; using System.Li