- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如标题所述,当我尝试在 Python 中调用以下 Rust 代码时遇到访问冲突。
这是 Rust 代码:
#![crate_type = "dylib"]
extern crate libc;
use libc::c_char;
use std::ffi::CStr;
use std::str;
#[repr(C)]
pub struct AdditionalDetail {
swis: String,
sbl: String,
school_code: String,
land_assessed_value: u32,
deed_book: String,
deed_page: String,
}
#[no_mangle]
pub extern fn parse_details(l: *const c_char) -> AdditionalDetail{
let _line = unsafe {
assert!(!l.is_null());
CStr::from_ptr(l)
};
let line = str::from_utf8(_line.to_bytes()).unwrap();
let _swis = line[52..58].to_owned();
let _sbl = line[58..78].to_owned();
let _school_code = line[371..377].to_owned();
let _land_assessed_value = line[824..836].parse::<u32>().ok().expect("Couldn't convert to an int");
let _deed_book = line[814..819].to_owned();
let _deed_page = line[819..824].to_owned();
AdditionalDetail{swis: _swis, sbl: _sbl, school_code: _school_code, deed_page: _deed_page,
land_assessed_value: _land_assessed_value, deed_book: _deed_book}
}
以及我用来调用它的 Python 代码:
from ctypes import cdll, c_uint32, Structure, c_char_p
class TaxDetail(Structure):
_fields_ = [('swis', c_char_p),
('sbl', c_char_p),
('school_code', c_char_p),
('land_assessed_value', c_uint32),
('deed_book', c_char_p),
('deed_page', c_char_p), ]
def __str__(self):
return str(self.swis)
lib = cdll.LoadLibrary(r"C:\Rust Workspace\embed\target\release\embed.dll")
lib.parse_details.restype = TaxDetail
lib.parse_details.argtype = (c_char_p,)
result = lib.parse_details(b"1346011 63 WAP WEST LLC 00000101 13460100615800142703690000 63 Wap West LLC 10 Fair Oaks Dr Poughkeepsie, NY 12603 000500000150000000017135601 14270369 411 000001 1 4-6Church St 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006158-14-270369-0000 058369006127002200002074000000052500000000286000N 0000000028600000000000000000000000000000000000Y")
print(result)
我已将 println!
调用添加到我的 Rust 代码中,当它尝试创建和返回结构时似乎发生了访问冲突。我收到的具体错误消息是 Process finished with exit code -1073741819 (0xC0000005)
。
在 64 位 Windows 10 上使用 32 位 Rust 和 Python 会发生这种情况。
最佳答案
我不确定问题的全部范围,但我知道这个问题不会很好:你不能返回一个 String
通过外国金融机构。
Rust String
在概念上由 3 个部分组成:指向内存块的指针、该内存的长度以及该内存中有多少是有效字符串。
将其与 C 字符串进行比较。 C 字符串只是指向内存的指针。您不知道有多少内存,您只能通过向下遍历每个字节直到到达 NUL 字节来知道有效长度。
更重要的是,String
没有标记为 #[repr(C)]
,所以 String
的实际布局> 结构取决于 Rust 编译器。
我怀疑错误的发生是因为 Python 发现您正在返回一个 c_char_p
(我假设它是一个 char *
)。然后它尝试读取指针的数据值,然后移动到下一个指针。它读取的“指针”可能是 String
的指针 或 长度 或 容量,并且一旦它读取第二个它就关闭在某处的杂草中。
相反,您将需要找出处理此字符串的替代方法。一些想法:
CString
并具有返回 as_ptr
结果的方法。类似的逻辑适用于 &str
,它在概念上是指向内存块的指针以及该内存块中有多少是有效的。
关于python - 通过 FFI 调用 Rust 函数时发生访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34885107/
我的工作是将每条记录写入 Hadoop 映射中的 DynamoDB。 我无法使用具有 httpclient-4.2.5.jar 和 httpcore-4.2.5.jar 的 Hadoop 2.6 运行
我在 JavaScript 中嵌套了循环开关,例如: for (var i = 0; i < checkBoxIds.length; i++) { if ($('#' + checkB
我有一个文件夹被重命名的分支。现在我正在尝试合并从主干到这个分支的更改,但是在主干中修改的文件仍然在原始文件夹名称下,因此 svn 引发了树冲突。我该如何解决这个问题? 该文件夹已使用 svn ren
我在使用 jquery 暴露插件和 Masked 输入插件时遇到了问题。问题是它们都占用 $.mask 函数,从而导致冲突。但我非常需要这两个插件一起工作。我会将其中一个中的 $.mask 重命名为.
我正在尝试为我所有的 INPUT 元素做一个简单的 :focus 效果,就像这样: INPUT:focus { border-color: orange; } 这很好用,直到我将这段 CSS 添加到样
我是 javascript 的新手。 在 wordpress 上工作,我在自定义 js 中为我的主题输入了以下函数: document.getElementsByName("empty_cart")[
为什么有些 javascript 会与其他的发生冲突?我的意思是我一直在为图片库使用 javascript 代码,然后尝试在 jquery 中获取文本水印。为什么在使用 jquery 之后,画廊完全消
是否可以根据已知的输入值创建 MD5 碰撞? 所以例如我有输入字符串 abc与 MD5 900150983cd24fb0d6963f7d28e17f72 . 现在我想将字节添加到字符串 def获得相同
我在我的项目中使用原型(prototype): NodeParser.prototype.getChildren = function(parentContainer) { return fl
根据我对 merge 冲突的理解,当两个人更改了同一文件和/或修改了该文件中的同一行时,就会发生 merge 冲突。所以当我做一个 git pull origin master 我期望 merge 冲
iPad 上 Mobile Safari 中的 HTML5 模板。带 iScroll 的 Div 工作正常。 if/else 语句中还包含一个 jQuery 函数。该函数测试用户是否在 iScroll
我一直在尝试使 2 个脚本(1 个 mootol 和 1 个 jquery)在同一页面上工作,但没有成功。我一直在研究许多论坛等,但我仍然无法使这两个脚本同时工作。 这就是它在我的标题中的样子: /w
我想克隆带标题的问号。一切正常,但是当我将鼠标悬停在新问号上时,第一个问号上会出现工具提示。有什么想法吗? 我正在使用 jQuery 和醉酒的工具提示。 Demo here click here
好吧,我已经在一个 friend 的网站上工作了一段时间了。我的编码技能......值得怀疑,而且我遇到了很多问题。 目前我网站上的 jQuery 停止工作了,我找不到原因,并且我已尽一切努力让它工作
我想使用一个文件来保存所有#define 和常量:示例 #ifndef CONSTANTS_H_ #define CONSTANTS_H_ #include //OVERALL DEFS
我在我的表单中的所有 HTML 下都有一些验证码,这似乎阻止了我的复选框验证码的工作,一旦我在我的 HTML 下的代码周围添加/* */(使其不活动),我就得出了这个结论) 复选框验证代码开始正常工作
我是新手。我的页面上有两个 javascript/jquery。如果我使用第一个脚本,第二个脚本将不起作用。如果我删除第一个脚本,第二个脚本就可以正常工作。我不知道如何解决这个问题。我知道有一个“无冲
我是 Bison 新手,在处理 Shift/Reduce 冲突时遇到了麻烦... 我正在为C语言编写语法规则:ID是标识变量的标记,我编写此规则是为了确保即使将标识符写在括号中,也可以考虑它。 id
我目前正在使用 LibGdx 开发我的第一个 Android 游戏项目。这是一款 2D 迷宫游戏,您可以使用触摸输入从其中一个入口到其中一个导出“画出”一条线。世界本身是一个 TiledMap,目前仅
我正在尝试通过 javascript 完成表单验证,并在 #form# 标记中放置一个要执行的 .py 文件操作。但问题是,当我提交数据后,它不会重定向到 .py 操作。所以我摆脱了 preventd
我是一名优秀的程序员,十分优秀!