<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[kingfox的专栏]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/kingfox</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; kingfox]]></copyright><item><title><![CDATA[VMware虚拟机无法向宿主机拖放文件]]></title><link>https://blog.csdn.net/kingfox/article/details/128762681</link><guid>https://blog.csdn.net/kingfox/article/details/128762681</guid><author>kingfox</author><pubDate>Thu, 26 Jan 2023 10:42:06 +0800</pubDate><description><![CDATA[本文分析了虚拟机无法向宿主机拖放文件的一种可能的解决方法。]]></description><category></category></item><item><title><![CDATA[Win10+GTX3060+Python+PyTorch+Tensorflow安装]]></title><link>https://blog.csdn.net/kingfox/article/details/128762634</link><guid>https://blog.csdn.net/kingfox/article/details/128762634</guid><author>kingfox</author><pubDate>Wed, 25 Jan 2023 22:19:31 +0800</pubDate><description><![CDATA[本文概述了如何安装支持GPU计算的Tensorflow和PyTorch。]]></description><category></category></item><item><title><![CDATA[利用msys2安装clang和llvm编译器]]></title><link>https://blog.csdn.net/kingfox/article/details/117450533</link><guid>https://blog.csdn.net/kingfox/article/details/117450533</guid><author>kingfox</author><pubDate>Tue, 01 Jun 2021 19:51:53 +0800</pubDate><description><![CDATA[很多文章介绍了如何从clang官网安装clang和llvm，不过最后都会说缺少include和lib，需要用别的方法。其实用msys2就可以下载基于MinGW-w64项目的clang和llvm。步骤如下：


]]></description><category></category></item><item><title><![CDATA[制作可被svchost调用的服务（下）]]></title><link>https://blog.csdn.net/kingfox/article/details/117190363</link><guid>https://blog.csdn.net/kingfox/article/details/117190363</guid><author>kingfox</author><pubDate>Sun, 23 May 2021 12:49:12 +0800</pubDate><description><![CDATA[上一篇简要介绍了如何制作一个可被svchost调用的服务，本篇介绍如何使得这个服务可以被svchost识别并调用。

svchost会到注册表的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost项中搜索其子项，每一个子项都是一个svchost服务组，svchost项有很多键值，每个键对应一个服务组，其值是该服务组下所有的服务



所以，首先要决定我们自己的服务放在哪个服务组里，这里假设是netsvcs组。在nets]]></description><category></category></item><item><title><![CDATA[制作可被svchost调用的服务（上）]]></title><link>https://blog.csdn.net/kingfox/article/details/117189103</link><guid>https://blog.csdn.net/kingfox/article/details/117189103</guid><author>kingfox</author><pubDate>Sun, 23 May 2021 10:51:47 +0800</pubDate><description><![CDATA[一个被svchost调用的服务应该做成DLL，所以必须定义DLLMain函数，做为动态库的入口。

DLLMain的代码框架如下：


BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
   switch (ul_reason_for_call)
   {
      case DLL_PROCESS_DETACH:
         // 将服务状态设置为SERVICE_CONTROL_]]></description><category></category></item><item><title><![CDATA[一个简单的基于C++的免main函数的主程序框架类]]></title><link>https://blog.csdn.net/kingfox/article/details/116371956</link><guid>https://blog.csdn.net/kingfox/article/details/116371956</guid><author>kingfox</author><pubDate>Mon, 03 May 2021 09:57:18 +0800</pubDate><description><![CDATA[教家里娃儿学习C++语言时，为了讲解C++的封装、继承、多态性等，写了个简单的主程序框架类。应用程序只要从这个主程序框架类派生出子类，实现其run(...)方法，然后定义一个子类实例即可。

抽象应用程序类AbstractApplication类的代码如下：


// absapp.h
#ifndef __ABSAPP_H
#define __ABSAPP_H
/**
 * AbstractApplication 应用程序的抽象框架类。
 * 应用程序主类应该从此类派生，override其纯虚函数run，随]]></description><category></category></item><item><title><![CDATA[一个简单小巧的日志类]]></title><link>https://blog.csdn.net/kingfox/article/details/116369337</link><guid>https://blog.csdn.net/kingfox/article/details/116369337</guid><author>kingfox</author><pubDate>Mon, 03 May 2021 07:59:24 +0800</pubDate><description><![CDATA[其实网上可以找到很多日志库，不过大多太大、考虑得太细致，所以索性自己写个最适合自己用的。

类定义logger.h如下：


// logger.h
#ifndef __LOGGER_H
#define __LOGGER_H

#include &lt;string&gt;

/**
 * Logger 通用日志类。
 *       日志文本格式为：yyyy-MM-dd hh:mm:ss:sss - log-message-text, message-code, extension-code.
 *   ]]></description><category></category></item><item><title><![CDATA[利用Win32 API获取当前登录用户名的几种方法比较]]></title><link>https://blog.csdn.net/kingfox/article/details/116353723</link><guid>https://blog.csdn.net/kingfox/article/details/116353723</guid><author>kingfox</author><pubDate>Sun, 02 May 2021 15:36:27 +0800</pubDate><description><![CDATA[方法一：使用GetUserName函数。

GetUserName可以获得创建当前进程的用户名，其函数原型是：


BOOL GetUserNameA(LPSTR lpBuffer, LPDWORD pcbBuffer);

其中，lpBuffer指向存放用户名的字符数组，pcbBuffer在调用之前需要赋予lpBuffer指向的缓冲区的长度，调用完成后会返回用户名的长度。

代码示例如下：


string getLoginUsernameByApi()
{
   char username[1024];]]></description><category></category></item><item><title><![CDATA[用boost::locale::conv转换字符编码时的坑！]]></title><link>https://blog.csdn.net/kingfox/article/details/116244201</link><guid>https://blog.csdn.net/kingfox/article/details/116244201</guid><author>kingfox</author><pubDate>Wed, 28 Apr 2021 22:17:12 +0800</pubDate><description><![CDATA[这两天编写一个网络通讯程序的时候，遇到字符编码在GBK和UTF-8之间转换的问题，打算用boost::locale::conv里面的函数来转换。代码很简单，调用boost::locale::conv::between即可。在eclipse cdt中编码，用MinGW作为编译器，在家里的电脑上编译链接调试，一切OK！

第二天，在单位电脑上写了同样的代码，按照同样的方式设定了project属性，链接的时候却出错了，提示：


undefined reference to `libiconv_open'
und]]></description><category></category></item><item><title><![CDATA[获取numpy二维矩阵四个角的值]]></title><link>https://blog.csdn.net/kingfox/article/details/107700793</link><guid>https://blog.csdn.net/kingfox/article/details/107700793</guid><author>kingfox</author><pubDate>Thu, 30 Jul 2020 21:17:13 +0800</pubDate><description><![CDATA[在菜鸟教程上学习numpy，提及numpy的高级索引，有个例子是给出一个二维矩阵，取出这个矩阵的四个角的元素，代码如下：


import numpy as np 
 
x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]])  
print ('我们的数组是：' )
print (x)
print ('\n')
rows = np.array([[0,0],[3,3]]) 
cols = np.array([[0,2]]></description><category></category></item><item><title><![CDATA[Windows下双显示器截屏方法]]></title><link>https://blog.csdn.net/kingfox/article/details/105394125</link><guid>https://blog.csdn.net/kingfox/article/details/105394125</guid><author>kingfox</author><pubDate>Wed, 08 Apr 2020 18:43:14 +0800</pubDate><description><![CDATA[网上的Windows环境下截屏的源代码很多，但是看到的都是只能适应单显示器，无法截取桌面扩展到双显示器情况下的完整屏幕。过查找资料和摸索，发现问题的关键就在于正确获得截屏的长宽尺寸。通常，计算屏幕实际大小可以用：


HWND hWnd = GetDesktopWindow();
RECT re;
GetWindowRect(window, &amp;re);
int width = re.rig...]]></description><category></category></item><item><title><![CDATA[C++程序利用Windows API获取GUI程序的主窗口]]></title><link>https://blog.csdn.net/kingfox/article/details/105208487</link><guid>https://blog.csdn.net/kingfox/article/details/105208487</guid><author>kingfox</author><pubDate>Mon, 30 Mar 2020 21:17:32 +0800</pubDate><description><![CDATA[首先要根据进程名称获取进程的pid：


int ProcessUtilities::lookupProcesses(const std::string &amp;procName, std::vector&lt;PROCESSENTRY32&gt; &amp;pes)
{
   string lowProcName = procName;
   StringUtility::lower(lowP...]]></description><category></category></item><item><title><![CDATA[将Eclipse CDT+MinGW配置成开发WIndows GUI程序的IDE环境]]></title><link>https://blog.csdn.net/kingfox/article/details/104339156</link><guid>https://blog.csdn.net/kingfox/article/details/104339156</guid><author>kingfox</author><pubDate>Sun, 16 Feb 2020 11:23:26 +0800</pubDate><description><![CDATA[在Windows平台上，Eclipse CDT + MinGW是很好的C/C++开发IDE，不过默认的配置只能用来编写控制台模式的WIndows程序，无法开发GUI程序，最大的障碍就是默认配置无法编译GUI程序需要的.rc文件，而.rc文件中包含了诸多GUI程序所需的图形控件。不过MinGW是带有Resource Compiler的（windres.exe），但是CDT却无法调用MinGW的资源编...]]></description><category></category></item><item><title><![CDATA[Eclipse CDT编译Windows资源文件（.rc文件）]]></title><link>https://blog.csdn.net/kingfox/article/details/104335658</link><guid>https://blog.csdn.net/kingfox/article/details/104335658</guid><author>kingfox</author><pubDate>Sat, 15 Feb 2020 22:19:50 +0800</pubDate><description><![CDATA[折腾了很久终于弄明白如何在Eclipse CDT环境中编译Windows编程所需的资源文件了。步骤如下：

1. 在project中加入资源文件resources.rc，然后鼠标右击该文件，在弹出菜单中选择“proterties”，如下图所示：



2. 在对话框中找到"C/C++ Builder"-&gt;"Tool Chain Editor"页面，在右下方的"Select tool"下拉框中...]]></description><category></category></item><item><title><![CDATA[笔记：STL的thread库应用]]></title><link>https://blog.csdn.net/kingfox/article/details/104319015</link><guid>https://blog.csdn.net/kingfox/article/details/104319015</guid><author>kingfox</author><pubDate>Fri, 14 Feb 2020 21:09:20 +0800</pubDate><description><![CDATA[最近研究了一下STL的thread库，做为学习成果，写了几个封装类，把thread封装起来，提供了sleep和stop方法，做为对thread的补充。

基类是AbstractThread，定义了start、stop、sleep三个公开的虚函数。start方法用于启动线程代码运行，stop方法用于终止线程代码，sleep方法供AbstractThread的子类使用，可用来暂停一段指定的时间。

A...]]></description><category></category></item><item><title><![CDATA[Linux下列表所有进程、根据进程名得到pid和根据pid得到进程名]]></title><link>https://blog.csdn.net/kingfox/article/details/104187364</link><guid>https://blog.csdn.net/kingfox/article/details/104187364</guid><author>kingfox</author><pubDate>Wed, 05 Feb 2020 19:46:05 +0800</pubDate><description><![CDATA[Linux下的当前正在运行的进程信息均存放在/proc目录下，有一系列以数字为名的子目录，每一个子目录对应一个进程，子目录名就是进程的pid。子目录下的status文件内容就是进程的基本信息，包括进程名、pid、ppid等。因此，若要扫描系统当前正在运行的所有进程，只需要遍历/proc目录下所有以数字为名的子目录下的status即可。据此，可得到获取当前系统所有进程快照、根据pid获得进程名和根据...]]></description><category></category></item><item><title><![CDATA[在Eclipse CDT中添加非标准库]]></title><link>https://blog.csdn.net/kingfox/article/details/104134547</link><guid>https://blog.csdn.net/kingfox/article/details/104134547</guid><author>kingfox</author><pubDate>Sat, 01 Feb 2020 15:50:28 +0800</pubDate><description><![CDATA[默认情况下，在CDT中开发C/C++程序时，如果只是用C/C++标准库，无需任何额外设置。不过，如果要开发的程序使用了非标准库，例如WinSock库，那就得在project中单独设置。鼠标右击project名，在弹出菜单中选择Properties，弹出project属性设置对话框，在左侧视图找到其中的C/C++ Build ——&gt; Settings，先在右侧视图的上方Configuratio...]]></description><category></category></item><item><title><![CDATA[为Eclipse CDT添加完整的代码自动完成功能]]></title><link>https://blog.csdn.net/kingfox/article/details/104121203</link><guid>https://blog.csdn.net/kingfox/article/details/104121203</guid><author>kingfox</author><pubDate>Fri, 31 Jan 2020 09:36:27 +0800</pubDate><description><![CDATA[Eclipse CDT是个很好的C/C++ IDE，但是其编辑器却有个非常糟糕的槽点：代码自动完成只支持由‘.’、‘:’、‘&gt;’这三个字符触发，这比大多数C/C++ IDE都差得多。这个问题很早就被提出来，并且解决的办法并不复杂，很多人都给出了解决方案，但是不知道为什么CDT的作者一直没有改进。既然原生CDT功能不足，那就自己动手，丰衣足食。

以下制作方法来源于网上素材，我在这里不过是重新...]]></description><category></category></item><item><title><![CDATA[类型无关的C语言通用冒泡排序函数]]></title><link>https://blog.csdn.net/kingfox/article/details/103537389</link><guid>https://blog.csdn.net/kingfox/article/details/103537389</guid><author>kingfox</author><pubDate>Sat, 14 Dec 2019 12:08:32 +0800</pubDate><description><![CDATA[最近教小家伙C语言，很快就要教到排序了，所以写了个通用的冒泡排序程序。这个函数可以对任意类型数组中的数据排序。

需要用到的数据类型和函数声明如下（sort.h）：


#ifndef __SORT_H
#define __SORT_H

#include &lt;stdlib.h&gt;

#ifndef __cplusplus
typedef enum
{
   false,
   true,...]]></description><category></category></item><item><title><![CDATA[在Eclipse CDT中利用Build Configuration构建有多个main函数的程序]]></title><link>https://blog.csdn.net/kingfox/article/details/103442016</link><guid>https://blog.csdn.net/kingfox/article/details/103442016</guid><author>kingfox</author><pubDate>Sun, 08 Dec 2019 09:35:46 +0800</pubDate><description><![CDATA[进来在为家里宝宝编写C/C++教程讲义，想用Eclipse做个project，里面每个文件是一个演示程序或者练习的答案。由于每个源代码文件都是完整的，都会有main函数，因此就会导致链接时出错，提示main函数重复定义。看到Eclipse有多build target的功能，就考虑使用这个功能来为每个源代码文件构建一个target来解决main函数重复定义的问题。查了很多资料，都说要用分别创建不同的...]]></description><category></category></item></channel></rss>