小编Ðаn*_*Ðаn的帖子

在未来的C#版本中是否有"扩展属性"的计划?

我之前已经想过这个,在阅读这个问题时又想起了这个问题.

在未来的C#版本中是否有"扩展属性"的计划?

在我看来,他们可能会非常直接地用更多的"编译器魔术"来实现.例如,在扩展方法名称上使用get_set_前缀会将该方法转换为扩展属性:

    public class Foo
    {
        public string Text { get; set; }
    }
    public static class FooExtensions
    {
        public static string get_Name(this Foo foo)
        {
            return foo.Text;
        }
        public static void set_Name(this Foo foo, string value)
        {
            foo.Text = value; 
        }
    }
Run Code Online (Sandbox Code Playgroud)

是否有任何技术限制可以防止这种情况发生?这会在幕后产生太多东西吗?不值得努力的重要性?

c# extension-methods properties

5
推荐指数
2
解决办法
357
查看次数

使用 HttpClient,如何将 XDocument 直接保存到请求流?

使用 HttpWebRequest,我可以调用 XDocument.Save()直接写入请求流:

XDocument doc = ...;
var request = (HttpWebRequest)WebCreate.Create(uri);
request.method = "POST";
Stream requestStream = request.GetRequestStream();
doc.Save(requestStream);
Run Code Online (Sandbox Code Playgroud)

是否可以用 做同样的事情HttpClient?直接的方法是

XDocument doc = ...;
Stream stream = new MemoryStream();
doc.Save(stream);
var content = new System.Net.Http.StreamContent(stream);
var client = new HttpClient();
client.Post(uri, content);
Run Code Online (Sandbox Code Playgroud)

但这会在 中创建另一个副本。XDocumentMemoryStream

.net rest httpwebrequest .net-4.5 dotnet-httpclient

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

MSBuild:错误 MSB3073 命令“setlocal VCEnd”退出,代码为 1

我正在尝试使用 Visual Studio 2015 和 CMake 在我的计算机上构建一个开源项目。我已遵循所有步骤,并且预构建检查运行正常。但是,当我构建 INSTALL 以将软件安装在我在 CMAKE gui 中指定的文件夹中时,我收到 MSB3073 错误。错误的完整描述如下。

Severity Code Description Project File Line Suppression State Error 
MSB3073 The command "setlocal
"C:\Program Files (x86)\CMake\bin\cmake.exe" -DBUILD_TYPE=RelWithDebInfo -P    cmake_install.cmake
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
:VCEnd" exited with code 1. 
INSTALL C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets  133 
Run Code Online (Sandbox Code Playgroud)

我搜索了相同的错误,发现一些尝试在没有写权限的目录中安装构建的人遇到了这个问题,但我已确保我具有写访问权限。我什至尝试使用管理员权限执行此操作,但仍然无法解决此问题。

对此的任何帮助将不胜感激。

msbuild cmake visual-studio-2015

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

为什么添加移动构造函数禁用初始化列表?

用简单的struct

struct Foo { int i; };
Run Code Online (Sandbox Code Playgroud)

我可以使用初始化列表创建一个新实例; 无需编写构造函数:

Foo foo { 314 };
Run Code Online (Sandbox Code Playgroud)

如果我现在添加一个移动构造函数

struct Bar
{
    int i;
    Bar(Bar&& other) { i = other.i; }
};
Run Code Online (Sandbox Code Playgroud)

初始化器不再起作用,我也必须添加一个构造函数:

Bar(int i) : i(i) {}
Run Code Online (Sandbox Code Playgroud)

我猜这种行为与这个答案有些相关(对于用户定义的move-constructor禁用隐式拷贝构造函数?),但更多细节会很好.

编辑:如答案所示,这与添加构造函数有关.如果我只添加一个移动运算符,这反过来会产生不一致的排序:

struct Baz
{
    int i;

    Baz& operator=(Baz&& other)
    {
        this->i = other.i;
        return *this;
    }
};
Run Code Online (Sandbox Code Playgroud)

初始化程序再次起作用,虽然"move"的语法略有不同(是的,这实际上是默认构造和移动赋值;但最终结果似乎大致相同):

Baz baz{ 3141 };
Baz b;
b = std::move(baz);
Run Code Online (Sandbox Code Playgroud)

c++ move initializer-list

5
推荐指数
2
解决办法
182
查看次数

将非托管C++指针转换为对象到托管C#对象

我有一个用C++编写的非托管静态库(.dll):

// This is a personal academic project. Dear PVS-Studio, please check it.
// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
#include "program.h"

struct MyData
{
    int32_t index;
    char* name;
    //uint8_t* data;
};

extern "C" {
    __declspec(dllexport) MyData* GetMyData()
    {
        MyData* ms = new MyData();
        ms->index = 5;
        ms->name = "Happy string";
        //ms->data = new uint8_t[5] { 4, 8, 16, 32, 64 };
        return ms;
    }
}
Run Code Online (Sandbox Code Playgroud)

'GetMyData'方法返回指向'MyData'对象的指针.

我使用'PInvoke'将此库导入C#projeсt并调用'GetMyData'方法.

// This is a personal academic project. Dear …
Run Code Online (Sandbox Code Playgroud)

.net c# c++ pinvoke marshalling

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

C++自动更新到新版本

我一直在寻找一个好的解决方案3天,但到目前为止我还没有找到任何解决方案.我的情况是:

客户端已安装应用程序(C++,控制台应用程序).启动时的应用程序将检查它与服务器的版本号并返回,或者它是最新的还是应该下载新版本.

如果必须下载新版本,我想用Curl下载新脚本,名称为:Application2.exe

但是,我希望它替换触发新版本下载的旧Application.exe.

我的解决方案是:Application.exe下载Application2.exe.下载后,它应该触发Updater.exe,它会让我们说5秒钟.在这5秒内(或任何最佳套房的时间跨度).在这5秒内,Application.exe有时间关闭,5秒后Updater.exeApplication.exe替换为Application2.exe.

现在更新完成,客户端安装了最新版本.

关于系统锁定文件等,此解决方案是否可行?

c++ version-control version download

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

使用 MinHook 挂钩 Windows 资源管理器 copyFile2 功能不起作用

我尝试挂钩CopyFile2函数,为此我编写了这个 dll:

#include "..\..\..\minhook-1.3.3\include\MinHook.h"

WCHAR msgbuf[1024];

#define DbgPrint(format, ...) wsprintf(msgbuf, format, __VA_ARGS__); \
                              OutputDebugString(msgbuf);

#if defined _M_X64
#pragma comment(lib, "libMinHook.x64.lib")
#elif defined _M_IX86
#pragma comment(lib, "libMinHook.x86.lib")
#endif

typedef HRESULT(WINAPI *COPY_FILE_2)(
    _In_      PCWSTR                          pwszExistingFileName,
    _In_      PCWSTR                          pwszNewFileName,
    _In_opt_  COPYFILE2_EXTENDED_PARAMETERS   *pExtendedParameters
    );

COPY_FILE_2 fpCopyFile2 = NULL;

HRESULT WINAPI DetourCopyFile2(
    _In_      PCWSTR                          pwszExistingFileName,
    _In_      PCWSTR                          pwszNewFileName,
    _In_opt_  COPYFILE2_EXTENDED_PARAMETERS   *pExtendedParameters
)
{
    DbgPrint(L"=> DetourCopyFile2\n");
    DbgPrint(L"DetourCopyFile2.pwszExistingFileName = %ws\n", pwszExistingFileName);
    DbgPrint(L"DetourCopyFile2.pwszNewFileName      = %ws\n", pwszNewFileName);

    return fpCopyFile2(pwszExistingFileName, pwszNewFileName, pExtendedParameters);
}


void InstallHook()
{    
    DbgPrint(L"=> InstallHook\n"); …
Run Code Online (Sandbox Code Playgroud)

c hook dll-injection

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

使用 clang-cl 在 Visual Studio 2019 中使用 Openmp 4/5

我正在尝试使用 OpenMP 运行一个简单的项目。由于Visual Studio仅支持OpenMP 2,因此我尝试使用Visual Studio 2019自带的LLVM clang-cl编译并运行该项目。编译部分似乎没问题,但在链接阶段,链接器无法解析OMP函数。

这是我的代码,只有 1 个文件:

#include <stdio.h>

void fn() {
    #pragma omp parallel num_threads(5)
    {
        int i;
        #pragma omp task depend(in : i)
        for (i = 0; i < 1; i++) {
            printf("task\n");
        }
    }
}

int main() {
    printf("hello\n");
    fn();
}
Run Code Online (Sandbox Code Playgroud)

我的 Visual Studio 项目属性:

  • Windows SDK version:10.0(最新安装版本)(10.0.18362.0)
  • Platform toolset: LLVM (clang-cl)
  • C/c++ - Command Line - Additional Options:/Zc:twoPhase- -Xclang -fopenmp -v
  • Linker - Additional DependenciesC:\Program Files …

openmp clang visual-c++ visual-studio-2019

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

在C++中如何检测是否按下了任意键?

我正在寻找一种方法来检测在 Windows 环境 C++ 控制台应用程序中是否按下了任何键。强调任何键,而不是特定的键或一组键。我搜索了整个网站,但找不到答案。我发现最好的方法是使用 GetKeyState 函数或 GetAsyncKeyState,但没有如何使用它的示例,并且我也检查了 Microsoft 网站上的文档,但仍然不确定如何使用它。

如果这是相关的并且有帮助,我正在使用 Visual Studio,并且在创建此项目时,我选择了空项目,而不是控制台应用程序。

该计划的概要预计如下所示:

时钟流程图

这是我迄今为止在主 .cpp 文件中使用的代码:

#ifndef MAINCPP
#define MAINCPP

#include "TwelveClock.h"
#include "TwentyFourClock.h"
#include <iostream>
#include <iomanip>
#include <Windows.h>
using namespace std;

void displayMenu() {
    cout << setw(27) << setfill('*') << "" << endl;
    cout << "* 1 -- Add One Hour" << setfill(' ') << setw(8) << '*' << endl;
    cout << "* 2 -- Add One Minute" << setw(6) << '*' << endl;
    cout << "* …
Run Code Online (Sandbox Code Playgroud)

c++ windows console

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

如果可以删除任何一个元素,则查找是否可以将数组分为相等和的两个子数组

给定一个数字数组,查找是否有办法从数组中删除/移除一个数字并在数组中进行一个分区(将数组划分为两个子数组),使得 subarray1 中的元素总和等于 subarray2 中元素的总和.

A subarray is a contiguous part of array.
Array [1, 2, 3, 4] has (1), (1,2), (2,3,4),(1,2,3,4) etc.. as its subarrays but not (1,3) , (2,4) , (1,3,4), etc..
Run Code Online (Sandbox Code Playgroud)

现在让我们考虑一个例子:-

(Follow 0-based indexing )
Array[] = [ 6, 2, 2, 1, 3 ]

Possible solutions
Delete Array[0] => updated array: - [ 2,2,1,3 ]
Possible partition              : - [2,2] and [3,1] where (2+2) = (3+1) = 4
or
Delete Array[1] => updated array: - [ …
Run Code Online (Sandbox Code Playgroud)

arrays algorithm sub-array

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