`
KB章鱼
  • 浏览: 27002 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

使用SWIG创建swc之二(C++类的调用)

阅读更多

同学们下午好, 在前一篇教程中我们已经了解了基本的SWIG创建SWC的过程, 今天我捣鼓了大半天研究了如何调用C++的类, 接下来说说过程吧.

 

首先编写C++类, 分别是example.h和example.cpp, 如下:

/**example.h*/
class TestCC
{
	public:
		TestCC(double, double);
		
		double x, y;
		
		virtual double add(void);
		virtual void set(double, double);
		void copyTo(TestCC*);
};

 

#include "example.h"

/**example.cpp*/
TestCC::TestCC(double v1, double v2)
{
	x = v1;
	y = v2;
}

void TestCC::copyTo(TestCC* t)
{
	t->x = x;
	t->y = y;
}

double TestCC::add(void)
{
	return x+y;
}

void TestCC::set(double v1, double v2)
{
	x = v1;
	y = v2;
}

 代码很简单, 相信不需要怎么说明了吧.

 

接下来就是打包了. 我们需要改一下swig的接口文件, 就像下面那样:

#ifdef SWIG
%module AddExample

%{
#include "example.h"
%}

%include "example.h"

#else
#include "example.h"
#endif

 

相应的MakeFile文件也做相应的修改:

all: check
	@echo "-------- PassingData --------"
	@echo "-> Generate SWIG wrappers around the functions in the library"
	"$(FLASCC)/usr/bin/swig" -c++ -as3 -module AddExample -outdir . -ignoremissing -o AddExample_wrapper.cpp example.i
	
	@echo "-> Compile the SWIG wrapper to ABC"
	$(AS3COMPILERARGS) -abcfuture -AS3 -import $(call nativepath,$(FLASCC)/usr/lib/builtin.abc) -import $(call nativepath,$(FLASCC)/usr/lib/playerglobal.abc) AddExample.as
	
	@echo "-> Compile the library into a SWC"
	"$(FLASCC)/usr/bin/g++" $(BASE_CFLAGS) AddExample.abc AddExample_wrapper.cpp example.cpp main.cpp -emit-swc=sample.add -o add.swc

include ../Makefile.common

clean:
	rm -f *_wrapper.c *.swc *.as *.abc

 修改了什么地方呢? 只是在第4行加了一个" -c++"而已啦, 不加的话会报一个“Warning 301: class keyword used, but not in C++ mode”的错误, 所以同学们加上吧.

 

接下来执行make命令吧, 看看是不是生成了add.swc文件了呢?

 

最后还是在AS中进行测试:

package
{
	import flash.display.Sprite;
	
	import sample.add.CModule;
	
	public class UnitTest extends Sprite
	{
		public function UnitTest()
		{
			CModule.startAsync(this);
			var a:TestCC = TestCC.create(10, 10);
			trace(a.add());
			a.set(20, 20);
			trace(a.add());

			var t:TestCC = TestCC.create(10, 10);
			t.copyTo(a.swigCPtr);
			trace(a.add());
		}
	}
}

 猜猜输出是什么? 是的, 如你们所预期的! 实验成功

20
40
20

 

 

0
0
分享到:
评论
1 楼 maodage 2014-07-10  
博主,如果C里写有保护类型的方法或属性,导出SWC后还保留着吗?

相关推荐

    使用Swig转换C++库到C#示例代码

    Swig(Simplified Wrapper and Interface Generator)是一种工具,它能够自动将C++库转换为其他编程语言,如C#,从而让这些语言可以调用C++的函数和类。在这个"使用Swig转换C++库到C#示例代码"的压缩包中,我们有三...

    swig--在java、C#中调用c++写的DLL(以vs2012配置为例)

    总结一下,本教程主要介绍了如何使用SWIG在Java和C#中调用C++编写的DLL,涉及到的知识点包括:SWIG工具的使用,C++ DLL的创建,接口文件的编写,以及Java的JNI和C#的DllImport特性。这些步骤对于跨语言编程和利用...

    swig工具,C/C++到python, tcl 的接口

    * 跨语言调用:SWIG使得C/C++代码可以在脚本语言中被调用,实现了跨语言的调用。 * 高效率:SWIG生成的wrapper可以直接调用C/C++代码,提高了代码的执行效率。 * 灵活性:SWIG支持多种脚本语言,用户可以根据需要...

    C#利用SWIG调用C++的DLL

    总结来说,C#通过SWIG调用C++ DLL的过程包括:编写C++函数,创建SWIG接口文件,使用SWIG生成C#绑定代码,最后在C#项目中调用生成的接口。这种方法在各种需要混合编程的场景中都非常实用,如游戏开发、科学计算等领域...

    go调用c++类接口

    然后,我们使用SWIG创建一个接口文件(.i),该文件描述了Go如何访问这些C++类和方法: ```swig // my_class.i %module my_class %{ #include "my_class.h" %} %include "my_class.h" ``` 运行SWIG命令,生成Go...

    android studio 使用NDK和swig编译c++示例

    本文将详细介绍如何在Android Studio项目中使用NDK和SWIG来编译C++代码,并创建一个示例项目“SwigNdkDemo”。 首先,你需要确保已经安装了Android Studio并配置了NDK。在Android Studio中,可以通过以下步骤设置...

    cmake_c++_python_swig

    标题 "cmake_c++_python_swig" 涉及的是使用CMake构建C++项目,并通过SWIG(Simplified Wrapper and Interface Generator)工具来创建Python接口的过程。这个主题是跨语言编程的一个重要方面,特别是在科学计算、...

    swig实例java调用c

    - 在Java项目中,通过`System.loadLibrary`加载DLL,并通过生成的Java类调用C函数。 总之,通过Swig,我们可以方便地在Java和C之间建立桥梁,实现跨语言的功能调用。这个实例特别适合初学者和开发者参考,它提供了...

    另一个js调用c++的示例

    N-API提供了C/C++ API,用于创建和管理Node.js对象,以及定义和调用C++函数。 5. **Binding Generation Tools**:如`node-gyp`或`emcc`,这些工具可以帮助简化C++与JavaScript之间的绑定过程,包括编译C++代码,...

    swig 打包C++ python应用

    swig 打包C/C++程序;供python调用。 本软件操作平台windows 10 Vs2017;python3.8; 主要讲述swig vs配置,测试用例。 主要包含常量,变量,指针,结构体定义及运用。

    SWIG 源码(C/C++与其他语言的粘合剂)

    SWIG是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具。SWIG能应用于各种不同类型的语言包括常用脚本编译语言例如Perl, PHP, Python, Tcl, Ruby and PHP。支持语言列表中也包括非脚本...

    python调用C++类的方法

    本篇主要介绍如何使用`pybind11`这一现代、简洁且高效的工具来实现Python调用C++类的方法。 `pybind11`是一个强大的库,它的设计目标是简化Python与C++之间的交互。它允许在C++代码中直接定义Python接口,使得C++类...

    SWIG4.0开发手册

    使用SWIG,可以创建一个简单的包装器(wrapper),使得其他语言能够调用C或C++编写的功能。 SWIG支持和实验性支持的语言模块涵盖了广泛的高级语言,包括但不限于Python、Perl、Ruby、PHP、Tcl、Java、C#、Objective...

    using swig to bind c++ to python

    本文将通过一系列小型C++示例来探讨SWIG如何支持C++的高级特性,例如模板和异常处理,并介绍如何使用SWIG创建Python绑定。 #### SWIG概述 SWIG最初是由David Beazley开发的,旨在简化C/C++代码与解释型语言之间的...

    python调用C++函数的工具 swig-4.2.0

    SWIG-4.2.0是SWIG的一个版本,提供了对最新C++标准的支持和优化,使得C++程序可以方便地被Python等脚本语言调用,极大地扩展了C++库的使用范围。 ### SWIG基本概念 1. **接口文件(.i 文件)**:SWIG工作时需要一...

    Python C++ and SWIG

    通过使用 SWIG (Simplified Wrapper and Interface Generator) 等工具,可以在保持 Python 的灵活性、生产力和易于维护的同时,利用 C 或 C++ 的高性能部分。这种方法使得 Python 程序员可以在需要的地方调用 C 或 ...

    从C++导出类到Python

    将C++类导出到Python,可以让我们在Python中使用C++的高性能代码,同时保持Python的开发便捷性。 1. **定义C++接口** 在C++中,我们需要为Python暴露一个清晰的接口。这意味着我们需要将类的方法声明为`extern "C...

    android 使用jni调用c++

    本教程将详细介绍如何在Android项目中使用JNI调用C++代码。 首先,你需要配置Android的NDK(Native Development Kit)。NDK是一组工具,开发者可以用它来编写用C和C++编写的应用程序模块,这些模块可以直接在...

    使用swig将C代码转为JAVA接口的例子(Win10平台)

    配置环境变量JAVA_BIN和JAVA_INCLUDE。比如: ...工程“属性” -> C/C++ -> 常规 -> 调试信息格式,选择“程序数据库(/Zi)”。 “生成”64位版本。 打开win10控制台,进入simple,运行”java runme“。

    linux 下 python调用c或者c++编写的代码使用案例

    这个过程包括创建SWIG接口文件、编译C/C++源码、生成Python模块和导入模块到Python中。 3. **使用Cython**: Cython是一种静态类型的Python方言,它可以编译为C扩展模块,从而提升Python代码的执行效率。如果你的...

Global site tag (gtag.js) - Google Analytics