小编Kal*_*son的帖子

如何修复 Windows 上的 Visual Studio Code 字符扭曲问题?

我在 Windows 11 的 Visual Studio Code 中使用 Rust 时遇到瑞典国家字符问题。可以通过以下程序显示:

\n
fn main() {\nlet abc = " \xc3\xa5\xc3\xa5\xc3\xa5\n\xc3\xb6\xc3\xb6\xc3\xb6\n\xc3\xa4\xc3\xa4\xc3\xa4";\nprintln!("<---{}--->", abc);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

当使用命令行从命令行运行程序时cargo run,输出如下:

\n
<--- \xc3\xa5\xc3\xa5\xc3\xa5\n     \xc3\xb6\xc3\xb6\xc3\xb6\n     \xc3\xa4\xc3\xa4\xc3\xa4--->\n
Run Code Online (Sandbox Code Playgroud)\n

奇怪的是,第 2 行和第 3 行的开头添加了空格。但是,当程序在 Visual Studio Code 中运行时,瑞典语字符会变形。

\n
<--- \xe2\x94\x9c\xc3\x91\xe2\x94\x9c\xc3\x91\xe2\x94\x9c\xc3\x91\n     \xe2\x94\x9c\xe2\x95\xa2\xe2\x94\x9c\xe2\x95\xa2\xe2\x94\x9c\xe2\x95\xa2\n     \xe2\x94\x9c\xc3\xb1\xe2\x94\x9c\xc3\xb1\xe2\x94\x9c\xc3\xb1--->\n
Run Code Online (Sandbox Code Playgroud)\n

我该如何解决?我从事文本处理工作,这是一个主要问题。

\n

编辑:由于该问题不会出现在许多系统上,因此我添加了技术数据:Windows 11 Pro Version 10.0.22621 Build 22621;\nVisual Studio Code Version: 1.73.1 (user setup) Date: 2022-11-09 Chromium :102.0.5005.167 Node.js:16.14.2 沙盒:否。

\n

character-encoding non-ascii-characters rust visual-studio-code

3
推荐指数
1
解决办法
1418
查看次数

为什么在字符串上调用 .to_string() 可以避免移动错误?不是说无操作吗?

以下测试程序无法编译:

fn f1( string: String) {
    println!("{}", string );
}

fn f2( string: String) {
    println!("{}", string );
}

fn main() {
    let my_string: String = "ABCDE".to_string();
    f1( my_string );
    f2( my_string );
}
Run Code Online (Sandbox Code Playgroud)

它会生成预期的错误:

11 |     f1( my_string );
   |         --------- value moved here
12 |     f2( my_string );
   |         ^^^^^^^^^ value used here after move
Run Code Online (Sandbox Code Playgroud)

但是,如果您使用my_stringto_string()方法,程序将编译并运行。to_string()应该是一个无操作方法,因为已经my_stringString。然而,这个程序运行良好。

fn f1( string: String) {
    println!("{}", string );
}

fn f2( string: …
Run Code Online (Sandbox Code Playgroud)

rust borrow

3
推荐指数
1
解决办法
188
查看次数

你能用 Rust 和 winapi 制作 Windows 桌面应用程序吗?

我有一个 Windows 应用程序,带有用 Rust 和 winapi 编写的 GUI。尽管有 GUI,但它的行为就像控制台应用程序。当exe文件启动时,Command Prompt会弹出一个窗口,并从中运行应用程序。这不是我想要的;应该打开一个主窗口,就像在所有真正的桌面应用程序中一样。我如何使用 winapi 在 Rust 中实现这个目标?

我研究了一些选择。您可以使用Taurigtk-rs开发 Windows 桌面应用程序,但这两种技术在用于 Windows 应用程序时都有缺点。可以在这里找到更多选项。我还尝试了互联网上提供的windows-rs 示例,但它们都是带有图形用户界面的控制台应用程序,这不是我想要的。

我还注意到,C++ 桌面应用程序使用该函数int APIENTRY wWinMain(...)作为入口点,而控制台应用程序使用int main(...), 并且wWinMain在 rust winapi 中似乎不可用。

windows winapi rust windows-rs

3
推荐指数
1
解决办法
1742
查看次数

为什么 .clone() 在闭包中使用时不会阻止移动?

我正在尝试通过智能克隆和借用来优化应用程序,并且我正在观察以下行为。下面的程序将无法运行:

fn f( string: String) {
    println!("{}", string );
}

fn main() {
    let my_string: String = "ABCDE".to_string();
    f( my_string );
    f( my_string );
}
Run Code Online (Sandbox Code Playgroud)

它会生成众所周知的“移动后使用”错误。

fn f( string: String) {
    println!("{}", string );
}

fn main() {
    let my_string: String = "ABCDE".to_string();
    f( my_string );
    f( my_string );
}
Run Code Online (Sandbox Code Playgroud)

这个可以通过克隆来解决my_string。下面的程序运行良好:

fn f( string: String) {
    println!("{}", string );
}

fn main() {
    let my_string: String = "ABCDE".to_string();
    f( my_string.clone() );
    f( my_string.clone() );
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您在多线程环境中使用相同的方法,克隆就不再有帮助了。当函数调用嵌入到线程中时: …

closures ownership rust

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

如何将图标链接到 Rust Windows 应用程序?

struct在 Rust 桌面应用程序中,总是使用某些版本的窗口,例如WNDCLASSW. WNDCLASSW定义后,可以通过成员添加类图标。下面的代码摘录演示了如何包含存储在文件中的图标。structhIconIcon.ico

...
        let hicon: HICON = LoadImageW(
            0 as HINSTANCE, 
            wide_null("Icon.ico").as_ptr(), 
            IMAGE_ICON, 0, 0, LR_LOADFROMFILE
        ) as HICON;

        let hinstance = GetModuleHandleW(null_mut());

        let mut wc: WNDCLASSW = std::mem::zeroed();
        wc.lpfnWndProc = Some(window_proc);
        wc. hInstance = hinstance;
        wc.hIcon = hicon;
        wc.lpszClassName = name.as_ptr();
...
Run Code Online (Sandbox Code Playgroud)

图标文件在程序执行期间加载,并且必须与该exe文件保存在同一文件夹中。如果图标文件丢失,LoadImageW()则返回NULL句柄。设置hIconNULL有效并导致使用标准系统图标。

虽然此方法会生成所需的图标,但图标文件是在执行期间加载的,并且必须与文件一起传递exe。这不是一个可接受的解决方案;图标应链接到exe文件并在其中传递。

如何将图标链接到 Rust Windows 应用程序并在那里使用它?

我知道这个解决方案,但它在编译过程中会生成数千行错误和警告,并且必须被视为过时的。此解决方案有效,但它仅添加Windows 中显示的 …

windows winapi rust rust-cargo

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