ffi 调 c++ dll 的问题

2019-01-17 16:30:21 +08:00
 Ritr

我在 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;//到这里就报错了

1233 次点击
所在节点    程序员
1 条回复
ysc3839
2019-01-17 18:50:50 +08:00
需要导出为 C 语言函数,看看 EC_CALL_API 的定义?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/527978

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX