V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Ritr
V2EX  ›  程序员

ffi 调 c++ dll 的问题

  •  
  •   Ritr · 2019-01-17 16:30:21 +08:00 · 1213 次点击
    这是一个创建于 1897 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我在 node.js 里用 ffi 调用 c++的 API,不带参数的 API 可以调通,带结构体指针的参数不知道如何调用 我要调用的是 Login 方法 这是 c++代码

    typedef struct _LoginInfo{
    	LoginAuthType authType; 
    	char  *username;
    	char  *userPassword;
    	char  *appKey;
    	char  *appToken;
    	char  *timestamp;
    	char  *MD5Token;
    	_LoginInfo()
    	{
    		memset(this,0,sizeof(_LoginInfo));
    	}
    
    }ECLoginInfo;
    
    EC_CALL_API int Login(const ECLoginInfo *loginInfo);
    

    这是 js 代码

    const ref = require("ref");
    const Struct = require("ref-struct");
    var ECLoginInfo = Struct({
      'authType': 'int',
      'username': 'pointer',
      'userPassword': 'pointer',
      'appKey': 'pointer',
      'appToken:':'pointer',
      'timestamp': 'pointer',
      'MD5Token': 'pointer'
    });
    var ECLoginInfoPtr = ref.refType(ECLoginInfo);
    exports.ECLoginInfo = ECLoginInfo;
    exports.ECLoginInfoPtr = ECLoginInfoPtr;
    
    var eclogin = new ECLoginInfo();
    
      const buf = Buffer(100) // 初始化一个无类型的指针 
      buf.write("12345", 0) // 写入值 12345
      console.log(buf)
      console.log(buf.hexAddress()) // 获取地址 hexAddress 
      buf.type = ref.types.CString;//到这里就报错了
    
    
    ysc3839
        1
    ysc3839  
       2019-01-17 18:50:50 +08:00 via Android
    需要导出为 C 语言函数,看看 EC_CALL_API 的定义?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2635 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 15:50 · PVG 23:50 · LAX 08:50 · JFK 11:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.