1.调用的时候我明明改成了 .mm  , 也添加了libstdc++.dylib  调用自己(xcode )写的(cocoa static lib )c++  ,编译总是报找不到库里的函数,

最后我在调用的.mm文件里写了一个c++类,在这个类里调用, 在objc里用这个c++类指针,成功了,  KFC(Kill Fuck Code) 
\\\

工作需要,有个加密的函数是cpp的,需要oc调用一下。

具体拿到的大概是这样一个东西:

#include <openssl/evp.h>

#include <openssl/md5.h>

#include <string>

#include <stdio.h>

static std::string encode_pass(std::string pass)

{

std::string tmpStream;

//TODO:一顿加密操作

return tmpStream;

}

如何调用这个cpp的函数得到结果呢?

我是这么做的。

新建一个oc的类,h文件:

#import <Foundation/Foundation.h>

@interface OCEncode : NSObject

+(NSString *)encodeString:(NSString *)str;

@end

然后m文件:

#import ...

static std::string encode_pass(std::string pass)

{

std::string tmpStream;

//TODO:一顿加密操作

return tmpStream;

}

@implementation OCEncode

/** 调用cpp函数,获得加密字符串 */

+(NSString *)encodeString:(NSString *)s{

const char* destDir = [s UTF8String];

std::string ret = encode_pass(destDir);

NSString *str = [NSString stringWithCString:ret.c_str() encoding:NSUTF8StringEncoding];

// NSLog(@"%@",str);

return str;

}

@end

好了,成功拿到结果。

这里需要导入基础的ssl库。然后注意先把oc的string转成c++里的string。调用函数,然后得到c++的结果,再转成oc的string。

留给需要的人。

OC调用c++函数的更多相关文章

  1. cordova ios --->OC 调用 js (一)

    1.在HTML中定义一个函数如OCcallJS() function OCcallJS(){ alert("OC 调用js 的 方法"); } 2.当webview 加载完成的时候 ...

  2. oc中调用c函数 实现将字符串转换成unsigned char

    帮助码友解决问题,从而复习了一下oc中调用c函数的方式 1,新建c 头文件  test.h 定义 c 函数 #ifndef test_h #define test_h void verificatio ...

  3. 如何动态调用 C 函数

    JSPatch 支持了动态调用 C 函数,无需在编译前桥接每个要调用的 C 函数,只需要在 JS 里调用前声明下这个函数,就可以直接调用: require('JPEngine').addExtensi ...

  4. ios oc调用swift framework

    1.oc 调用swift /*oc调用swift, project name为DeomOC: 1.oc工程DemoOC中显式创建一个swift文件,生成DemoOC-Bridging-Header.h ...

  5. 在lldb调试中调用c++函数

    在lldb调试时,调用oc对象的方法不足为奇,因为msgSend是有原型导出的,oc对象的方法都运行期绑定的,绑定信息都在objc_class中.只要在调试中[receiver sel]之类,lldb ...

  6. iOS开发--OC调用JS篇

    OC调用JS篇 其中相对应的html部分如下: <html> <header> <meta http-equiv="Content-Type" con ...

  7. ng-repeat循环出来的部分调用同一个函数并且实现每个模块之间不能相互干扰

    使用场景:用ng-repeat几个部分,每个部分调用同一个函数,但是每个模块之间的功能不能相互干扰 问题:在用repeat实现.content块repeat的时候打算这样做:新建一个空的数组(nmbe ...

  8. 深入理解javascript系列(4):立即调用的函数表达式

    本文来自汤姆大叔 前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行. 在详细了解这个之前,我们来谈了解一下“自执行”这个叫法,本文对这个功能的叫法 ...

  9. EC笔记,第二部分:9.不在构造、析构函数中调用虚函数

    9.不在构造.析构函数中调用虚函数 1.在构造函数和析构函数中调用虚函数会产生什么结果呢? #; } 上述程序会产生什么样的输出呢? 你一定会以为会输出: cls2 make cls2 delete ...

随机推荐

  1. .Net语言 APP开发平台——Smobiler学习日志:如何快速实现手机上的资源上传功能

    最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的“Smobil ...

  2. Sqlite操作帮助类

      sqlite帮助类 using System; using System.Collections.Generic; using System.Linq; using System.Text; us ...

  3. [PHP]命令执行函数的区别

    <?php $cmd="ps aux|grep php-fpm"; $res=exec($cmd,$o); var_dump($o);//数组形式返回,每行一个元素 var_ ...

  4. DataSnap 多层返回数据集分析FireDAC JSON

    采用服务器返回数据,一种是返回字符串数据例如JSON,跨平台跨语言,任何语言调用都支持兼容,类似WEBService. 第二种是紧密结合c++builder语言,传输DataSet,可以是Client ...

  5. Prometheus Operator 架构 - 每天5分钟玩转 Docker 容器技术(178)

    本节讨论 Prometheus Operator 的架构.因为 Prometheus Operator 是基于 Prometheus 的,我们需要先了解一下 Prometheus. Prometheu ...

  6. Win7 64位下安装64bit MS SQL Server2005时安装不了Reporting Services的处理办法

    警告截图: 解决办法: 在cmd窗口运行如下脚本即可: "cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/A ...

  7. 高德地图 Service 创建服务 USERKEY_PLAT_NOMATCH

    在使用高的地图 创建服务的时候 { "errmsg": "USERKEY_PLAT_NOMATCH", "errcode": 10009, ...

  8. Unity2018 Open C# Project Error

    错误日志 升级到Unity2018之后,使用 Open C# Project 打开VS工程,出现报错,无法启动VS. 错误日志如下: ArgumentException: Value does not ...

  9. java反射(java.lang.reflect) ---普通单例模式唯一性问题

    1. 普通的饱汉式.饿汉式 package org.bighead.test2; public class TestPrivate { private String str = "strPr ...

  10. MySQL 数据库的创建&修改

    -- 创建数据库 CREATE DATABASE [IF NOT EXISTS]<数据库名> DEFAULT CHARACTER SET utf8; -- 默认字符集为utf8 -- 指定 ...