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

ffi 调 c++ dll 的问题

  •  
  •   Ritr · 326 天前 · 561 次点击
    这是一个创建于 326 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我在 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;//到这里就报错了
    
    
        1
    ysc3839   326 天前 via Android
    需要导出为 C 语言函数,看看 EC_CALL_API 的定义?
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4099 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 22ms · UTC 07:10 · PVG 15:10 · LAX 23:10 · JFK 02:10
    ♥ Do have faith in what you're doing.