• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Ritr
V2EX  ›  程序员

ffi 调 c++ dll 的问题

  •  
  •   Ritr · Jan 17, 2019 · 1691 views
    This topic created in 2687 days ago, the information mentioned may be changed or developed.

    我在 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  
       Jan 17, 2019 via Android
    需要导出为 C 语言函数,看看 EC_CALL_API 的定义?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3262 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 61ms · UTC 11:57 · PVG 19:57 · LAX 04:57 · JFK 07:57
    ♥ Do have faith in what you're doing.