我和我的老板发生了争执,他确信 JVM 使用 JNI 来访问诸如文件系统之类的本机事物。我认为他错了,因为 JVM 本身是本机代码,它直接与操作系统通信——它不需要 JNI 样板来访问文件系统。
请帮我澄清JVM是如何工作的
如果我有一个实例,我使用该属性还是 LINQConcurrentDictionary是否重要?我宁愿写,而不是我认为更具描述性的。CountAny()dict.Any()dict.Count > 0Any()
我只关心正确性,而不关心性能。用例是
void process()
{
if (concurrentDictionary.Count <= 0) // or !Any() ?
return; // dictionary is empty, nothing to do
// ...
}
Run Code Online (Sandbox Code Playgroud) 对于struct有const会员
struct point { const int x; const int y; };
Run Code Online (Sandbox Code Playgroud)
用作会员数据
struct Foo
{
point pt{ 0, 0 };
void move_x(int value);
};
Run Code Online (Sandbox Code Playgroud)
如何Foo::move_x()写更新Foo::pt?可以使用memcpy()吗?
#include <memory.h>
void Foo::move_x(int value)
{
const point pt_{ pt.x + value, pt.y };
(void) memcpy(&pt, &pt_, sizeof(pt_)); // pt = pt_;
}
Run Code Online (Sandbox Code Playgroud)
这可以使用指针安全地完成
#include <memory>
struct Bar
{
std::unique_ptr<point> pPt_{ new point{ 0, 0 } };
const point& pt() const {
return *pPt_;
} …Run Code Online (Sandbox Code Playgroud) 我知道如何完全隐藏光标,但是他们有什么方法可以阻止它闪烁吗?莫名的让人不安...
我不会为此安装 3rd 方软件,我想要的是使用几行 C++ 的简单解决方案。
我正在尝试编写一个 CMAKE 文件来编译此处找到的代码。
我当前的 CMAKE 文件如下所示,并且已成功编译并链接了之前的教程。它也编译了这个,但在链接时出现以下错误:
undefined reference to `gst_video_overlay_get_type'
undefined reference to `gst_video_overlay_set_window_handle'
Run Code Online (Sandbox Code Playgroud)
CMAKE 文件如下所示:
cmake_minimum_required(VERSION 3.18)
project(gstreamer)
set(CMAKE_CXX_STANDARD 20)
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
pkg_search_module(GST REQUIRED gstreamer-1.0>=1.4
gstreamer-sdp-1.0>=1.4
gstreamer-app-1.0>=1.4
gstreamer-video-1.0>=1.4
)
add_executable(gstreamer main.cpp)
target_include_directories(gstreamer PRIVATE ${GTK3_INCLUDE_DIRS} ${GST_INCLUDE_DIRS})
target_link_libraries(gstreamer ${GTK3_LIBRARIES} ${GST_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)
其他 SO 帖子建议了gstreamer-video-1.0我相信我所在的链接:
target_link_libraries(gstreamer ${GST_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)
如果我误解了 PkgConfig 的工作原理,我非常感谢您的解释。
谢谢
我最近在一台 Windows 10 计算机上安装了 Visual Studio 2019,其中 VS 2013 和 VS 2017 很久以前就已经安装了。VS 2019 的表现非常不稳定(无法编译几乎原始的 C++ 项目),因此我想从我的计算机中清除任何 VS 的所有痕迹,并仅从全新安装 VS2019 开始。
Visual Studio 安装程序只想添加软件。如何安全地从系统中完全清除 Visual Studio 的所有安装,以便获得全新安装?Add/Remove Programs显示我安装了数十种 Microsoft 产品;我根本不清楚应该删除哪些内容才能实现我的目标。
这个问题是与同事进行午餐时间对话的结果......我读过像WPF和Winforms这样的问题......我个人认为长期 WPF是要走的路.问题/问题是在此期间要做什么.
是的,WPF当然有其优势; 不是建立在GDI/USER上的就是其中之一.但是在这个时间点(即2009年末;使用VS2008或甚至VS2005; Silverlight3最近发布并且尚未广泛采用/部署),WPF几乎看起来可能是一个"过度设计"的解决方案.虽然我确信它会随着时间的推移而改变,但它不会让今天的事情变得更容易,也不会使眼前的(比如<36个月)更加容易.
让我们面对现实,WinForms 非常简单易行; 特别是对于仍然"幸福地"使用MFC的许多同事而言.是的,可能很难做出光滑的动画,3D图形,渐变等; 但它是一个非常实用的解决方案,许多人(即C++/MFC开发人员)今天很容易理解.
随着那个漫长的介绍 - 有人想/累了/等等.关于使用WPF实现(大多数)WinForms的想法(即,WinForms 没有 GDI/USER)?我敢肯定Control.Handle,100%重新实施是不可能的.但看起来很多WinForms控件似乎可以使用WPF"引擎盖下"重新实现.或者这真的是边界线不可能吗?
通过"重新实现",我设想删除对System.Windows.Forms的程序集引用,用(比如)Microsoft.Wpf.WinForms替换它们,然后重建我的应用程序.之后,我希望修复一些(相对较少数量的)编译器和/或运行时错误(比如P/Invokes到Win32 API).
像这样的东西似乎是微软各种WinForms/WPF互操作策略(如WindowsFormsHost)的很好的补充.例如,开发人员可以以更加渐进的方式开始使用/学习WPF.
编辑:虽然各种"为什么?" 讨论很有意思,他们没有回答基本的技术问题:"是的,......这是怎样的......;或者不,......因为......".
我对使用c ++进行GUI编程非常陌生,因此我没有那么多经验。
我使用Visual Studio 2017 CRL程序包为自己的程序创建了一个GUI,现在我正在尝试使该exe可供所有人使用。对于已安装Visual Studio或VC Runtime的用户,该应用程序运行良好,但对于那些未进行编程的用户,该应用程序会抛出类似以下内容:“您的计算机上缺少vcruntime140.dll以运行该应用程序”。我不确定如何在程序中链接这些dll,以便每个人都可以使用它。我也不确定我将如何链接dll。
我需要获取 Windows 计算机上所有已安装的更新。我尝试了 WUA API,但结果与我在控制面板 - 已安装的更新中看到的不同。我的代码返回 321 更新,而在控制面板中我看到 508。这是我的代码:
IUpdateSearcher* updateSearcher = NULL;
IUpdateSession* updateSession = NULL;
IUpdateCollection* updateList = NULL;
ISearchResult* results = NULL;
IUpdate* updateItem = NULL;
BSTR criteria = NULL;
LONG updateSize = 0;
HRESULT hr;
if ((hr = CoInitialize(NULL)) != S_OK)
{
return -1;
}
if ((hr = CoCreateInstance(CLSID_UpdateSession, NULL, CLSCTX_INPROC_SERVER, IID_IUpdateSession, (LPVOID*)&updateSession)) != S_OK)
{
return -1;
}
if ((hr = updateSession->CreateUpdateSearcher(&updateSearcher)) != S_OK)
{
return -1;
}
if ((hr = updateSearcher->put_ServerSelection(ssWindowsUpdate)) != S_OK) …Run Code Online (Sandbox Code Playgroud) 我正在使用一个内联全局变量,它非常适合它。
class MyClass {
public:
void Func() {
}
}
inline MyClass myClass; // global inline variable
Run Code Online (Sandbox Code Playgroud)
以上适用于我的目的,但是当我的代码在 gcc 上编译时使用低于 C++17 的编译器时我收到警告。以下是警告
警告:内联变量仅适用于 -std=c++1z 或 -std=gnu++1z
问题:
如何抑制 gcc 上的警告?
我试图通过使用#pragma下面的类似来抑制警告
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wc++17-extensions"
inline MyClass myClass;
#pragma GCC diagnostic pop
Run Code Online (Sandbox Code Playgroud)
上述#pragma技术适用于 clang,但看起来 GCC 不理解#pragma? 我只是想蛮力压制 GCC 上的警告。我怎样才能做到这一点?
看起来 gcc 警告选项列表甚至没有提到这个? https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
我正在使用gcc (GCC) 7.3.0