RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-314729

ghostinecatnewyear's questions

Martin Hope
ghostinecatnewyear
Asked: 2020-10-21 21:31:16 +0000 UTC

如何使用 WinAPI 确定正式的 CPU 时钟速度?

  • 0

您需要使用 WinAPI 函数确定盒子上写的 CPU 时钟速度(即,从注册表中提取的选项不适合)。

任何搜索尝试都会引发关于如何在给定时间找到实际频率的讨论。有人建议我使用“CallNtPowerInformation”或“QueryPerformanceFrequency”,但有很多问题。我将从“QueryPerformanceFrequency”开始:出于我的所有愿望,我仍然不明白它返回什么。我解释一下:我的 CPU 频率约为 1.1 GHz,函数返回值“100,000,000”。这个值是如何测量的?以赫兹为单位?然后是 100 MHz,这是不正确的。

“CallNtPowerInformation”。这里的问题更复杂,坦率地说,我不知道如何解决它。“powerbase.h”头文件中的这个函数被指令“#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)”注释掉了,但是函数调用仍然进行(组装和执行成功)。问题是它失败并出现错误,返回一个负数作为错误代码,这很奇怪。

winapi
  • 1 个回答
  • 10 Views
Martin Hope
ghostinecatnewyear
Asked: 2020-07-16 18:21:39 +0000 UTC

确定 Windows 8.1 及更高版本上的操作系统版本

  • 2

Microsoft 文档描述了 GetVersion() 函数,该函数允许您获取当前操作系统的版本。但是,在 8.1 及更高版本中,该函数被声明为“已弃用”,因为 返回不正确的结果,因此建议使用 IsWindowsXXXOrGreater() 类型的“版本辅助函数”。但是这些函数根本不会取代 GetVersion(),因为 不允许你找出“颠覆”、构建等特征,而只返回“是/否”。所以他们不适合(或者我不明白)。

此外,我还找到了两个解决该问题的方法:调用 RtlGetVersion() - 内核模式下 GetVersion() 的类似物,或者将清单连接到项目。尽管进行了长时间的搜索,但我没有实现其中任何一个。网络上有很多关于这些主题的讨论,但没有一个讨论得如此完整,以至于我个人很清楚。我希望在这里他们会给我一个至少其中一种方式的例子。

PS关于连接manifest:具体描述一下我没看懂的。

清单文件应该有什么扩展名?.xml?。显现?.exe.manifest?

您需要将清单作为独立资源连接到项目还是连接到具有资源的特定文件?

文档中标题为“语法”的块是什么以及在何处以及如何包含其内容?

winapi
  • 1 个回答
  • 10 Views
Martin Hope
ghostinecatnewyear
Asked: 2020-07-15 20:53:52 +0000 UTC

解码 GetLocaleInfoEx() 函数的结果

  • 0

该任务的本质是确定用户区域设置的特征(如国家、语言、日期和时间格式等)。我似乎找到了前进的方向:我使用 GetUserDefaultLocaleName() 获取语言环境名称,然后将其与定义要返回的特征的常量(如 LOCALE_ICOUNTRY、LOCALE_ILANGUAGE 等)一起传递给 GetLocaleInfoEx()。最后一个函数返回一个包含十六进制数字的字符串,我不知道如何处理它。唯一可用的来源是来自 Microsoft 的文档,但老实说,我在那里也找不到任何东西。只有名称接近我的问题的主题,但描述略有不同。

winapi
  • 1 个回答
  • 10 Views
Martin Hope
ghostinecatnewyear
Asked: 2020-07-11 19:34:09 +0000 UTC

C++。未在 WinAPI 中正确使用 GetUserName() 和 GetDiskFreeSpace() [关闭]

  • 0
关闭。这个问题需要具体说明。目前不接受回复。

想改进这个问题? 重新构建问题,使其只关注一个问题。

3年前关闭。

改进问题

以下代码片段使用 GetUserNameA():

std::string getUserName()
{
    DWORD nameLength   = 64;
    LPSTR computerName = new CHAR[nameLength];
    GetUserNameA(computerName, &nameLength);

    std::string name(computerName);
    delete[] computerName;

    return name;
}

在 MinGW 下正常工作,但在 MSVC 下不能正常工作。这是它抛出的链接错误:

windowsoptions.obj:-1: 错误: LNK2019: 函数“class std::basic_string,class std::allocator > __cdecl WindowsOptions::getUserName(void)”中未解析的外部符号引用 __imp_GetUserNameA (?getUserName@WindowsOptions@@YA?AV ?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ)

这段代码使用 GetDiskFreeSpaceA():

int64_t WindowsOptions::getDriveTotalSize(const std::string &driveName)
{
    DWORD totalClusters;
    DWORD freeClusters;
    DWORD sectorsPerCluster;
    DWORD bytesPerSector;
    GetDiskFreeSpaceA(driveName.c_str(),
                      &sectorsPerCluster,
                      &bytesPerSector,
                      &freeClusters,
                      &totalClusters);

    int64_t totalBytes = totalClusters * sectorsPerCluster * bytesPerSector;

    return totalBytes;
}

并在 MinGW 的一个版本(在另一个版本下一切正常)和 MSVC 下给出不正确的结果。

如您所见,最后一个函数将返回值相乘并计算磁盘上的总字节数。在调试时,我发现了以下内容:


总集群 = 121804599

扇区每簇 = 8

字节每扇区 = 512

总集群 * 扇区每集群 = 974436792

totalClusters * sectorPerCluster * bytesPerSector = 695431168(错误!)


好像溢出一样,虽然64位足够存储任何驱动器的容量值。

如果我更深入地了解这个话题......我必须寻求帮助。

c++
  • 1 个回答
  • 10 Views
Martin Hope
ghostinecatnewyear
Asked: 2020-07-08 03:49:42 +0000 UTC

使用 CMake 构建 Qt 项目的奇怪问题

  • 0

该项目的原始结构是:

在此处输入图像描述

其中 CMakeLists.txt 的内容如下:

cmake_minimum_required(VERSION 3.10.0 FATAL_ERROR)

project(HardwareAndSystemInformation LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

find_package(Qt5 REQUIRED COMPONENTS 
    Core 
    Gui 
    Widgets 
    WebEngineWidgets
)

set(project_headers 
    aboutwindow.h 
    datacollector.h 
    filesystemworkmodule.h 
    mainwindow.h 
    outerfileincluder.h
)

set(project_sources 
    aboutwindow.cpp 
    datacollector.cpp 
    filesystemworkmodule.cpp 
    main.cpp 
    mainwindow.cpp 
    outerfileincluder.cpp
)

qt5_wrap_cpp(project_sources_moc                     
${project_headers})

source_group("MOC Files" FILES 
${project_sources_moc})

    add_executable(${PROJECT_NAME} WIN32 
        ${project_headers} 
        ${project_sources} 
        ${project_sources_moc}
    )

    target_link_libraries(${PROJECT_NAME} PUBLIC 
        Qt5::Core 
        Qt5::Gui 
        Qt5::Widgets 
        Qt5::WebEngineWidgets
    )

get_target_property(_qmake_executable Qt5::qmake         
IMPORTED_LOCATION)
get_filename_component(_qt_bin_dir         
"${_qmake_executable}" DIRECTORY)
find_program(WINDEPLOYQT_EXECUTABLE windeployqt     
HINTS "${_qt_bin_dir}")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
    COMMAND "${CMAKE_COMMAND}" -E
    env PATH="${_qt_bin_dir}" 
"${WINDEPLOYQT_EXECUTABLE}"
            --verbose 0
            --no-compiler-runtime
            \"$<TARGET_FILE:${PROJECT_NAME}>\"
)

该程序集非常成功地完成,并且还生成了 .exe(在 Visual Studio 中启动)。

随着项目的进一步发展,其结构略有变化:

在此处输入图像描述

CMakeLists.txt 的内容是:

cmake_minimum_required(VERSION 3.10.0 FATAL_ERROR)

project(HardwareAndSystemInformation LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTORCC ON)

find_package(Qt5 REQUIRED COMPONENTS 
    Core 
    Gui 
    Widgets 
    WebEngineWidgets
)

set(project_headers 
    src/aboutwindow.h 
    src/datacollector.h 
    src/filesystemworkmodule.h 
    src/mainwindow.h 
    src/outerfileincluder.h 
    src/webengineview.h
    src/windowsoptions.h
)

set(project_sources 
    src/aboutwindow.cpp 
    src/datacollector.cpp 
    src/filesystemworkmodule.cpp 
    src/main.cpp 
    src/mainwindow.cpp 
    src/outerfileincluder.cpp 
    src/webengineview.cpp
    src/windowsoptions.cpp
)

set(project_resources resources.qrc)

qt5_wrap_cpp(project_sources_moc ${project_headers})
source_group("MOC Files" FILES ${project_sources_moc})

add_executable(${PROJECT_NAME} WIN32
    ${project_headers} 
    ${project_sources} 
    ${project_resources} 
    ${project_sources_moc}
)

target_link_libraries(${PROJECT_NAME} PUBLIC 
    Qt5::Core 
    Qt5::Gui 
    Qt5::Widgets 
    Qt5::WebEngineWidgets
)

get_target_property(_qmake_executable Qt5::qmake IMPORTED_LOCATION)
get_filename_component(_qt_bin_dir "${_qmake_executable}" DIRECTORY)
find_program(WINDEPLOYQT_EXECUTABLE windeployqt HINTS "${_qt_bin_dir}")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
    COMMAND "${CMAKE_COMMAND}" -E
        env PATH="${_qt_bin_dir}" "${WINDEPLOYQT_EXECUTABLE}"
            --verbose 0
            --no-compiler-runtime
            \"$<TARGET_FILE:${PROJECT_NAME}>\"
)

问题是 CMake 正常地“看似”构建它(有时会弹出错误“生成过程中的错误,项目文件可能无效”,但并非总是如此)。接下来,Visual Studio 无法生成 .exe。这就是它的全部 - CMake 没有提供有关错误的任何详细信息。

乍一看,一切似乎都是正确的,因为我刚刚添加了一些带有标题的新源和一个带有图像的 .qrc。此外,qmake 构建项目时不会出错,甚至可以运行。

我知道对问题的解释是相当肤浅的,并不指望有保证的答案,但我怀疑我在某个地方搞砸了构建配置,我希望有经验的人至少能够偶然发现一个差距。

qt
  • 1 个回答
  • 10 Views
Martin Hope
ghostinecatnewyear
Asked: 2020-06-16 21:54:52 +0000 UTC

C++。在他们之外预先声明类成员

  • 3

我有这样的情况,有两个类,每个类都需要另一个的构造函数。这要求他们不仅要看到声明(原型),还要同时看到彼此的定义,这是不可能的。这意味着每个类必须至少从上面看到另一个构造函数的原型。

这是我的代码:

#include <iostream>

class Euros;
Euros::Euros(double euros = 0);

class Dollars
{
    private:
        double m_dollars;

    public:
        Dollars(double dollars = 0) : m_dollars(dollars)
        {
        }

        operator double() const { return m_dollars; }
        operator Euros() const { return Euros(m_dollars * 0.89); }

        double getDollars() const { return m_dollars; }
        void setDollars(double dollars) { m_dollars = dollars; }
};

class Euros
{
    private:
        double m_euros;
    public:
        Euros(double euros) : m_euros(euros)
        {
        }

        operator double() const { return m_euros; }
        operator Dollars() const { return Dollars(m_euros * 1.12); }

        double getEuros() const { return m_euros; }
        void setEuros(double euros) { m_euros = euros; }
};

这里,对于每个类,类型相互转换的操作是重载的,为此需要返回一个使用构造函数新创建的对面类的实例。欧元级的一切都很好,因为 它看到了 Dollars 类的完整定义,这意味着它也看到了构造函数。对于 Dollars 类,情况正好相反:它根本看不到欧元。在第 3 行,我声明了 Euros 原型,但这还不够,因为 要创建一个对象,您还需要一个构造函数。

我知道一个类的方法只需要在它里面声明,定义可以在它外面。但我不知道是否可以做相反的事情:在类中定义它,并在它之前声明它。在第 4 行,我尝试执行此操作,但收到错误“无效使用不完整类型 'class Euros'”。当然,这个错误还导致了其他错误,但这个错误是所有问题的根源。

尝试 google 导致我意识到我无法用搜索引擎可以理解的语言提出问题。如何解决这个恶性循环?

c++
  • 1 个回答
  • 10 Views
Martin Hope
ghostinecatnewyear
Asked: 2020-06-11 19:25:48 +0000 UTC

为什么链接时头文件中定义的内联函数不重复?

  • 10

我阅读了有关“常规”和内联函数的事实:

在前面的章节中,我们反复说过,你不应该在头文件中定义函数,因为如果你在几个 .cpp 文件中包含一个带有函数定义的头文件,那么函数定义也会被复制多次。然后,当您链接文件时,链接器将抛出一个错误,表明您多次定义相同的函数。

但是,内置函数不受此规则的约束,因为源代码中没有重复 - 函数的定义是一个,并且在通过链接器连接 .cpp 文件时不应有任何冲突。

为什么不能在头中定义函数很清楚:链接包含该头的多个模块时会发生“多重定义”。但是从文本中根本不清楚为什么该规则不适用于内联函数。我是这样理解的:“内联函数不重复,因为它们不重复。” 狂欢。

当然,我可以理所当然地考虑这个事实,仅此而已,但是我仍然想了解为什么会发生这种情况,但是本文没有给出详尽的解释。

c++
  • 2 个回答
  • 10 Views
Martin Hope
ghostinecatnewyear
Asked: 2020-06-07 23:52:50 +0000 UTC

为什么多任务处理会减少整体执行时间?

  • 0

我在某本书中读到,多任务处理可以让您加快执行多项任务的过程。我有一些问题。

单处理器机器上的指令严格按顺序执行。多任务处理在于每个任务交替转移控制权一小段时间,因此产生了它们同时工作的感觉,但是每个参与处理器时间斗争的任务的总执行时间等于无中断地执行相同任务的时间。这意味着多任务处理不仅不能加快进程,还会减慢进程,因为。在任务之间切换需要额外的时间。这篇论文是基于我在开头提到的同一本书中给出的理论。

有一种我不明白某处的感觉,这就是为什么我现在在我的脑海中感到尴尬。我不能以一种可以被搜索引擎“消化”的方式来表述这个问题,不要怪我。

процессор
  • 2 个回答
  • 10 Views
Martin Hope
ghostinecatnewyear
Asked: 2020-05-10 01:53:37 +0000 UTC

无法处理汇编语言中的“lods”链式指令

  • 0

目标是使用链式命令计算字符串中元素的乘积。

masm
model small

.data
    matr dw 1,2,3
         dw 4,5,6
         dw 7,8,9
    n dw 3
    comp dw ?

.stack 256

.code
    main proc
        assume ds:@data,es:@data

        mov ax,@data
        mov ds,ax
        mov es,ax

        mov cx,n
        LO:
            ; установка si на начало текущей строки
            mov ax,n
            sub ax,cx
            mul n
            mov bx,ax
            add bx,bx
            mov si,matr[bx]

            ; подсчёт произведения
            push cx
            mov cx,n
            cld
            mov comp,1
            LI:
                lodsw
                mul comp
                mov comp,ax
            loop LI

            ; вывод результата
            mov ax,comp
            mov bx,10
            mov cx,0
            L1:
                xor dx,dx
                div bx
                push dx
                inc cx
            cmp ax,0
            jg L1
            mov ah,2h
            L2:
                pop dx
                add dl,30h
                int 21h
            loop L2
            mov dl,' '
            int 21h

            pop cx
        loop LO

        mov ax,4C00h
        int 21h
    main endp

end main

问题是结果显示了难以理解的值,在本例中为“0 60 0”。通过测试,我们发现问题仅出在注释“产品计算”下的代码部分。似乎我正确使用了命令,并且在循环之前执行了所有必要的操作,但它不想正常工作。也许他们会在这里指出我的错误。

ассемблер
  • 1 个回答
  • 10 Views
Martin Hope
ghostinecatnewyear
Asked: 2020-04-15 23:18:30 +0000 UTC

DOS 汇编程序中的异常十进制输出

  • 0

下面给出了最简单的十进制数输出算法,由于某种原因,它根本无法正常工作。几次我在工作表上运行了这个例子——一切都是正确的。工作的实际结果是序列“97531”的无限循环输出。

data segment

data ends

stak segment stack
    db 256 dup (0)
stak ends

code segment
    main proc
        assume ds:data,ss:stak,cs:code

        push data
        pop ds

        mov al,69
        mov bl,10
        L:
            xor ah,ah
            div bl
            mov dl,ah
            add dl,30h
            mov ah,2h
            int 21h
        cmp al,0
        jg L

        mov ax,4c00h
        int 21h
    main endp
code ends

end main
ассемблер
  • 1 个回答
  • 10 Views
Martin Hope
ghostinecatnewyear
Asked: 2020-02-29 07:14:22 +0000 UTC

自移动对象的Java AWT实现[关闭]

  • 1
关闭。这个问题需要澄清或补充细节。目前不接受回复。

想改进这个问题?通过编辑此帖子添加更多详细信息并澄清问题。

3年前关闭。

改进问题

我已经在按键上实现了对象的移动,但我还不知道如何让它自己移动。首先想到的是计时器的使用。我是正确的?如果没有,你能给我一些建议吗?

java
  • 1 个回答
  • 10 Views
Martin Hope
ghostinecatnewyear
Asked: 2020-01-20 00:26:27 +0000 UTC

哎呀。父类类型的类对象

  • 2

在 OOP 主题的示例中,我经常注意到基于某个类创建的对象存储在“父类”类型的变量中。让我用一个例子来解释:

class Pet {
    // реализация
}


class Cat extends Pet {
    // реализация
}

然后,在 main 方法中:

Pet myCat = new Cat();

“根据经典”,myCat 变量应该被声明为 Cat 类型,这是合乎逻辑的。我注意到通过这种方式可以将不同类型的对象分组到集合中,但是具有相同的祖先,但是,这些对象的所有功能都将仅限于这个祖先。

我想知道为什么要这样做,以及你能从中得到什么或失去什么。

java
  • 3 个回答
  • 10 Views
Martin Hope
ghostinecatnewyear
Asked: 2020-11-06 22:42:11 +0000 UTC

C:非标准类型的输出数据(int32_t)

  • 0

这样的问题:通过函数sched_getparam()接收进程优先级在一个变量Ps。如您所知,表示优先级值的类型是一个结构体,它有一个类型struct sched_param字段,它只是表示优先级。我想知道是否可以在屏幕上显示该字段的值(直觉告诉我是的,因为优先级值(在 QNX OS 中)似乎用整数表示)?问题是我不知道使用. 直接试了,试了cast to ,但是总是出现内存错误。也许有一些函数可以输出这个值......问题不仅仅是关于类型sched_priorityint32_tprintf()%dSp->sched_priorityintint32_t,还有其他非标准类型,以后无论如何都会遇到。

c
  • 1 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5