C C++相互调用实例

一  C调用C++

1. 代码组织

2. test.h

/*************************************************************************
    > File Name: test.h
    > Author: ma6174
    > Mail: [email protected]
    > Created Time: Tue 11 Nov 2014 04:18:38 PM WST
 ************************************************************************/
#ifndef TEST_H
#define TEST_H
class CTest {
	private:
		int a, b;
	public:
		CTest(int, int);
		int Add();
};
#endif

3. test.cpp

/*************************************************************************
    > File Name: test.cpp
    > Author: ma6174
    > Mail: [email protected]
    > Created Time: Tue 11 Nov 2014 04:37:29 PM WST
 ************************************************************************/

#include "test.h"
CTest::CTest(int m, int n) {
	this->a = m;
	this->b = n;
}
int CTest::Add() {
	return this->a + this->b;
}
extern "C" {     // compile according C
	int CAdd(int a, int b) {
		CTest test(a, b);
		return test.Add();
	}
}

4. main.c

/*************************************************************************
    > File Name: test.c
    > Author: ma6174
    > Mail: [email protected]
    > Created Time: Tue 11 Nov 2014 04:23:11 PM WST
 ************************************************************************/

#include <stdio.h>
extern int CAdd(int a, int b);
int main() {
	int n = CAdd(2, 6);
	printf("%d\n", n);

	return 0;
}

5. Makefile

CC=gcc
all:
	$(CC) -g -o main main.c test.cpp

6. 测试

二 C++调C

1. 代码组织

2. test.h

/*************************************************************************
    > File Name: test.h
    > Author: ma6174
    > Mail: [email protected]
    > Created Time: Tue 11 Nov 2014 05:21:48 PM WST
 ************************************************************************/
#ifndef TEST_H
#define TEST_H
#ifdef _cplusplus
extern "C" {
#endif
	int add(int, int);   // C implement
#ifdef _cplusplus
}
#endif
#endif

3. test.c

/*************************************************************************
    > File Name: test.c
    > Author: ma6174
    > Mail: [email protected]
    > Created Time: Tue 11 Nov 2014 05:24:26 PM WST
 ************************************************************************/

#include <stdio.h>
#include "test.h"
int add(int a, int b) {
	return a + b;
}

4. main.cpp

/*************************************************************************
    > File Name: main.cpp
    > Author: ma6174
    > Mail: [email protected]
    > Created Time: Tue 11 Nov 2014 05:25:24 PM WST
 ************************************************************************/

#include <iostream>
#include "test.h"
using namespace std;
int main() {
	int n = add(2, 6);
	cout << n << endl;

	return 0;
}

5. Makefile

CC=g++
all:
	$(CC) -g -o main main.cpp test.c test.h

6. 测试

时间: 2024-10-05 05:41:49

C C++相互调用实例的相关文章

C程序与Lua脚本相互调用

Lua脚本是一种可用于C程序开发/测试的工具,本篇介绍一下C程序与Lua脚本如何进行相互调用,更加详细的操作参见<Programing in Lua>.本文分为3个部分:1.Windows环境下Lua的下载以及安装注意事项:2.Visual C++6.0中Lua的配置:3.C程序与Lua脚本相互调用实例. 1.Windows环境下Lua的下载以及安装注意事项 a.下载Lua for Windows,笔者用的版本是V5.1.4-35: b.上微软官网,下载Visual C++运行库——vcred

C语言与汇编语言相互调用原理以及实例

下面两个分别是一个foo.asm(汇编语言文件),bar.c(c语言文件) 首先来了解C语言为什么能调用汇编语言,以及汇编语言为什么能调用C语言.其实不管是C语言还是汇编语言想要执行都是最终编译链接成为二进制文件. 注意是编译链接这个两个步骤,编译产生的并不是可执行的二进制文件,链接之后才是可执行的二进制文件. 这里一定要明确编译和链接是两个步骤,生成的文件格式也是不一样的. 编译生成的文件是一定格式的,里面包括函数符号表.参数表...等信息,这些信息主要是提供给链接阶段使用,函数调用是怎么调用

Python实例浅谈之三Python与C/C++相互调用

一.问题 Python模块和C/C++的动态库间相互调用在实际的应用中会有所涉及,在此作一总结. 二.Python调用C/C++ 1.Python调用C动态链接库 Python调用C库比较简单,不经过任何封装打包成so,再使用python的ctypes调用即可. (1)C语言文件:pycall.c /***gcc -o libpycall.so -shared -fPIC pycall.c*/ #include <stdio.h> #include <stdlib.h> int f

[转]C# winform与Javascript的相互调用

C# winform与Javascript的相互调用 <html> <head> <meta http-equiv="Content-Language" content="zh-cn"> <script language="javascript" type="text/javascript"> <!-- 提供给C#程序调用的方法 --> function messag

lua和C++相互调用

从lua调用C++函数和对象,利用LuaPlus可以方便的从C++中调用lua脚本,反过也一样.通过注册函数或类对象,lua便可以访问C++. 一.C风格函数注册    Lua提供了C风格的回调函数注册,该函数原型如下: int Callback(LuaState* state); 无论是全局函数.类非虚函数.类虚函数,只要符合上面的原型,都可以向Lua注册.我们以全局函数为例,下面是我们提供的一个回调函数CStyleAddFunc: int CStyleAddFunc(LuaState * s

.Net 与 Java 的服务接口相互调用

本文介绍.Net 与 Java 相互调用的例子.下面的介绍主要包括三方面:一是通过常用Web服务进行相互调用,二是使用TCP/IP套接字进行相互调用,三是使用Remote实现远程对象相互调用. 首先说一下Web服务的来源,Web服务是一种新的Web应用程序分支,可以执行从简单的请求到复杂商务处理等任何功能.一旦部署以后,其他Web服务应用程序可以发现并调用它部署的服务. Web Service是一种应用程序,它可以使用标准的互联网协议,像超文件传输协议(HTTP).简单对象访问协议(SOAP).

菜鸟入门之lua与c++相互调用(包含多个demo)

前两篇文章中,已经介绍了使用vs2010编译lua5.1源码生成lua.lib 和 vs项目中使用c++调用lua,可以保证demo在vs上运行起来了.这里再详细介绍下c++和lua之间的相互调用以及原理. c++与lua直接的调用,实际上通过一个栈结构来传递数据,该栈结构栈顶的索引值为-1,向栈底方向索引值依次为-1 ,-2......栈顶索引为1.栈结构里可以放函数,表,字符串,整形等各种lua的基本数据. 一.在当前cpp目录下创建test.lua文件,用于与c++交互调用,代码如下: p

Unity3d 脚本相互调用

unity中三种调用其他脚本函数的方法 第一种,被调用脚本函数为static类型,调用时直接用  脚本名.函数名().很不实用…… 第二种,GameObject.Find("脚本所在物体名").SendMessage("函数名");  此种方法可以调用public和private类型函数 第三种,GameObject.Find("脚本所在物体名").GetComponent<脚本名>().函数名();此种方法只可以调用public类型

C#与lua相互调用

Lua是一种很好的扩展性语言,Lua解释器被设计成一个很容易嵌入到宿主程序的库.LuaInterface则用于实现Lua和CLR的混合编程. (一)C#调用Lua 测试环境:在VS2015中建一个C#控制台应用程序,并添加LuaInterface.dll的引用 LuaInterface下载地址:http://luaforge.net/projects/luainterface/ (下载luainterface-1.5.3,这里面的资源比较多) LuaInterface.Lua类是CLR访问Lua