小编Dra*_*oon的帖子

(Rust 问题) C++ 双指针指向 void 的含义

我正在尝试通过遵循 Microsoft 为 ADSI API 和 Windows-RS 板条箱发布的 c++ 示例来使用 Rust 的活动目录。我不太明白这里发生了什么:

https://docs.microsoft.com/en-us/windows/win32/api/adshlp/nf-adshlp-adsopenobject

他们创建了一个指向 IAD 的未初始化指针(从我的 C# 知识中得出,它看起来像一个接口)然后,当需要使用它时,他们有一个双指针,它被强制转换为 void。我试图在 Rust 中复制这种行为,但我想我只是不明白发生了什么。这是我迄今为止尝试过的:

// bindings omitted
use windows::Interface;
use libc::c_void;
 
fn main() -> windows::Result<()> {
        let mut pads: *mut IADs = ptr::null_mut();
        let ppads: *mut *mut c_void = pads as _;

        unsafe {
            let _ = CoInitialize(ptr::null_mut());
            let mut ldap_root: Vec<u16> = "LDAP://rootDSE\0".encode_utf16().collect();
            let hr = ADsOpenObject(
                ldap_root.as_mut_ptr() as _,
                ptr::null_mut(),
                ptr::null_mut(),
                ADS_AUTHENTICATION_ENUM::ADS_SECURE_AUTHENTICATION.0 as _,
                & IADs::IID,
                ppads,
            );

            if !hr.is_err() { …
Run Code Online (Sandbox Code Playgroud)

c++ adsi rust

6
推荐指数
1
解决办法
265
查看次数

Rust 块方法具有自己的值?

我试图一次对多个字符串块执行并行操作,并且发现借用检查器存在问题:

(对于上下文,identifiersVec<String>来自 CSV 文件的,client是 reqwest,targetArc<String>一次写入多次读取的)

use futures::{stream, StreamExt};
use std::sync::Arc;

async fn nop(
    person_ids: &[String],
    target: &str,
    url: &str,
) -> String {
    let noop = format!("{} {}", target, url);
    let noop2 = person_ids.iter().for_each(|f| {f.as_str();});
    "Some text".into()
}

#[tokio::main]
async fn main() {
    let target = Arc::new(String::from("sometext"));
    let url = "http://example.com";
    let identifiers = vec!["foo".into(), "bar".into(), "baz".into(), "qux".into(), "quux".into(), "quuz".into(), "corge".into(), "grault".into(), "garply".into(), "waldo".into(), "fred".into(), "plugh".into(), "xyzzy".into()];

    let id_sets: Vec<&[String]> …
Run Code Online (Sandbox Code Playgroud)

chunks ownership rust

2
推荐指数
1
解决办法
3044
查看次数

标签 统计

rust ×2

adsi ×1

c++ ×1

chunks ×1

ownership ×1