【在C代码调用C++代码】教程文章相关的互联网学习教程文章

C++调用C中编译过的函数要加extern "C"

C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。假设某个C 函数的声明如下:void foo(int x, int y);该函数被C 编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字用来支持函数重载和类型安全连接。由于编译后的名字不同,C++程序不能直接调用C 函数。C++提供了一个C 连接交换指定符号extern“C”来解决这个问题。例如:extern “C”{void foo(int x, int y); ...

C++通过一个函数名的字符串调用对应的函数【代码】

函数按名调用假设现有多个函数,如果要根据输入的名字和参数进行相应的调用,如果是在python,可以直接将一个函数名字符串和函数对象的映射存入一个字典,然后直接取出函数就能调用。def func_1(x, y):return x + ydef func_2(x):return x*xdef func_3():print("function 3")func_map = {"fun1" : func_1,"fun2" : func_2,"fun3" : func_3, }fun_name = "fun1"if fun_name in func_map.keys():func = func_map[fun_name]func(1,2) ...

C# 中静态调用C++dll 和C# 中动态调用C++dll【图】

C# 中静态调用C++dll 和C# 中动态调用C++dll在最近的项目中,牵涉到项目源代码保密问题,由于代码是C#写的,容易被反编译,因此决定抽取核心算法部分使用C++编写,C++到目前为止好像还不能被很好的反编译,当然如果你是反汇编高手的话,也许还是有可能反编译。这样一来,就涉及C#托管代码与C++非托管代码互相调用,于是调查了一些资料,顺便与大家分享一下:一. C# 中静态调用C++动态链接 1. 建立VC工程CppDemo,建立的时候选择...

C#中调用c++的dll【图】

使用的工具是VS2010哦~其他工具暂时还没试过我新建的工程名是my21dll,所以会生成2个同名文件。接下来需要改动的只有画横线的部分下面是my21dll.h里面的。。。下面的1是自动生成的不用动,或者也可以不要,因为只是一个宏而已下面可以做相应修改。下面的2是自动生成的类,我没用就注释掉了下面的3是自动生成的一个测试函数,原来函数最前面是extern,记住精髓是要改成EXTERN_C 下面的4是我自己写的一个测试函数,用来求和下面是my21...

C++赋值运算符、函数调用运算符、下标运算符(“=”、“()”、“[]”)重载

#include <iostream>#include <assert.h>#include <string.h>using namespace std;class cstring{public: cstring(char *str=""); cstring(const cstring &str); cstring operator+(const cstring &str); //赋值运算符只能用成员函数重载,不能被继承,用户自己不重载系统会默认冲在一个(但不一定能满足要求) cstring &operator=(const cstring &str); //重载函数调用运算符,只能用成员函数 int oper...

C#调用C++导出(dllexport)方法【代码】

开发环境:visual studio 2013+win10 一:建立C++项目在vs中建立C++project(Win32 Project),需要注意的是,要勾选:  Application type:Dll  Additional options:Export symbols在项目头文件中放入代码:#define WAOCVDLL_API __declspec(dllexport) // 自定义方法 EXTERN_C WAOCVDLL_API int _stdcall Fit(int width, int height, wchar_t*image, float*firstPoint, int pointsLength); 然后再cpp文件中实现该方法:WAOCVD...

C++普通成员函数的调用形式【代码】

#include<iostream> usingnamespace std; class A { public:int data;void foo(int x){data = x;cout << "data=" << data << endl;} }; void foo(A* ps, int x) {ps->data = x;cout <<"data="<<ps->data << endl; } int main() {A a;a.foo(3);cout << "----------" << endl;foo(&a,3);//对于类的成员函数,C++设计时有一个要求,要求类的成员函数的执行效率不能比全局函数差。//基于此:/*a.foo(3);编译器会在为其添加参数,this指...

Cococs2d-x c++调用java静态函数

cocos2d-x中JniHelper类封装了我们所需要的,原理是通过JNI获取java虚拟机,再获取当前程序的JNI环境,通过JNI环境获取需要调用的java类信息,再获取需要调用的java类中的函数信息。再通过JNI环境调用,使用类信息、函数信息,调用对应的java函数。主要接口:static bool getStaticMethodInfo(JniMethodInfo &methodinfo, const char *className, const char *methodName, const char *paramCode);功能:获取java类相应函数信息,cl...

C++调用bat并实现传值【代码】

1.设置环境变量,这一类为路径C++ void bat(const string& sDirC, const string& sDirD) {char Ddir[256];Ddir[0] = 0;sprintf_s(Ddir, "DDIR=%s%s", (char*)sDirD.data(), "\\");_putenv(Ddir); //将地址设置到当前环境中char Cdir[256];Cdir[0] = 0;sprintf_s(Cdir, "CDIR=%s%s", (char*)sDirC.data(), "\\");_putenv(Cdir); system("..\\..\\Bin\\x64\\copy.bat" );     //调用bat 推荐下面那种/*if...

cocos2d 中使用jni C++ 调用 Java 方法

1.简单数据类型例子假设我们Java中有这么一个open的静态方法,它没有参数,有一个int的返回值。怎么在C++中调用它呢?package cb.CbCCBLE; public class CbCCBLECentralManager {public static final String TAG = "CbCCBLECentralManager Android";public static int open(){Log.d(TAG,"open");return 1;} }下面就是下面具体的调用方法,难点主要就是getStaticMethodInfo方法的传入参数。 注意到cb/CbCCBLE/CbCCBLECentralManager...

c++与java中子类中调用父类成员的方法【代码】

1java中:2import java.util.Scanner;3publicclass ClassTest{4publicstaticvoid main(String args[]){5 child ch=new child(2);6 parent p=ch;7 p.print();8//p.print2();//调用错误,父类中没有改成员方法,该方法只属于子类! 9 } 10} 1112class parent{ 13int xx; 14 parent(int x){ 15 xx=x; 16 } 17void print(){ 18 System.out.println("this is parent!"); 19 } 20int f(){ 21int ...

在C++中调用DLL中的函数(3)

转自:http://www.cnblogs.com/woshitianma/p/3681745.html1.dll的优点代码复用是提高软件开发效率的重要途径。一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用。比较常见的例子是各种应用程序框架,ATL、MFC等,它们都以源代码的形式发布。由于这种复用是“源码级别”的,源代码完全暴露给了程序员,因而称之为“白盒复用”。“白盒复用”的缺点比较多,总结起来有4点。 暴露了源...

C++调用matlab函数【图】

C++与matlab混合编程——C++调用MATLAB函数 笔者最近在从事一个MFC相关的项目,要求将用Matlab实现的算法通过应用MFC制作成一个小应用。其中有一部分内容需要求一个多元函数的最值。通过网络,我找到了两个C++优化库,dlib与MIDACO_Project ,可是这两个库中的优化函数的应用方式无法融入MFC编程框架,因此想到应用matlab与C++混合编程来实现相关计算。在网络上查了很多资料使问题得到了解决,下面对之前所查资料的内容做一番...

C中如何调用C++函数 (转载)

原贴:https://www.cnblogs.com/colife/p/3779208.html 将 C++ 函数声明为``extern "C"‘‘(在你的 C++ 代码里做这个声明),然后调用它(在你的 C 或者 C++ 代码里调用)。例如:// C++ code:extern "C" void f(int);void f(int i){ // ...} 然后,你可以这样使用 f():/* C code: */void f(int);void cc(int i){ f(i); /* ... */ } 当然,这招只适用于非成员函数。如果你想要在 C 里调用成员函数(包括虚函数),则...

【cocos2dx C++】关于cocos2dx的C++调用创建项目【图】

我使用的是cocos2dx-2.1.4版本+cygwin,其实主要是为了配合公司项目,所以用了低版本的cocos2dx假设已经配置环境成功:按照对应的要求输入包名,项目名,以及TargetId,就可以了。 注意:我在创建的时候遇到一个问题,我用的是eclipse的SDK,然后eclipse里面的android.bat根本找不到对应的所有版本的targetId,于是我就用了androidStudio里面的android.bat,居然就可以了,我也不知道为什么。原文:http://www.cnblogs.com/wufeng0...