首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript到C++ char指针-LPSTR缓冲区的JSCTypes

Javascript到C++ char指针-LPSTR缓冲区的JSCTypes
EN

Stack Overflow用户
提问于 2011-08-04 05:26:03
回答 2查看 2.1K关注 0票数 0

我正在使用JavaScript使用JSCTypes访问DLL。我必须通过将字符缓冲区传递给以下API来接收数据,

代码语言:javascript
复制
__declspec(dllexport) WORD WINAPI receive( LPWORD  lpwBufferSize,
                                           LPSTR   lpsBuffer);

我的jsctype看起来像这样,

代码语言:javascript
复制
let receive = libs.dll.declare("receive",
                               ctypes.stdcall_abi,  
                               ctypes.int32_t,           // Return type - return code
                               ctypes.int32_t.ptr,       // buffer size
                               ctypes.char.ptr,          // Buffer
                               );
var bufferSize = new ctypes.int32_t(3000000).address(); //3000000
var buffer = new ctypes.char().address();
let rvopen = receive(bufferSize, buffer);
return buffer.readString()

使用上面的代码,我可以第一次正确地接收数据,但是在后续的时候,xulrunner在接收函数调用时崩溃。我试图使用windows上可用的通用DLL来重现此问题。这引发了一个异常,未定义的异常: TypeError: ctypes.char.array(500).address不是一个函数

代码语言:javascript
复制
var hostName = exports.getString = function() {
    let lib = ctypes.open('Ws2_32.dll');
    let gethostname = lib.declare("gethostname",
                                  ctypes.default_abi,
                                  ctypes.int,
                                  ctypes.char.ptr,
                                  ctypes.int);
    var myArray = ctypes.char.array(500).address();
    gethostname(myArray, 500);
    return myArray.readString();
};

如果我删除address调用并按下面的方式尝试,

代码语言:javascript
复制
var myArray = ctypes.char.array(64);

我遇到了这个问题,尽管在C++中数组被认为是指针。

'uncaught : TypeError:预期类型指针,在0行获得ctypes.char.array(640000)‘in file’

我无法访问dll的任何源代码。我只有DLL的包含文件(.h)。我是一个Java开发人员,不确定我是否可以在没有源代码的情况下进行调试,任何帮助都值得赞赏!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-07 14:57:34

终于找到了解决办法,

代码语言:javascript
复制
<code>
 let charArray= ctypes.ArrayType(ctypes.char);
 let myArray = new charArray(500);      
</code>

功能原型是相同的

票数 1
EN

Stack Overflow用户

发布于 2011-08-05 03:34:28

如果我不得不猜测,我会说,您需要将缓冲区分配到适当的大小。也许:

代码语言:javascript
复制
var buffer = new ctypes.char().array(3000000).address();

尝试使用在“接收”函数中设置了断点的调试器来查看从JS传递了哪些数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6936567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档