小编Inc*_*bus的帖子

我是否必须在客户端程序中绑定UDP套接字才能接收数据?(我总是得到WSAEINVAL)

我创建一个UDP套接字(AF_INET,SOCK_DGRAM,IPPROTO_UDP通过Winsock的),并试图recvfrom在此套接字上,但它总是返回-1,我得到WSAEINVAL(10022).为什么?

当我bind()的端口,这不会发生,但我已经读到绑定客户端的套接字是非常蹩脚的.

我正在向我的服务器发送数据,该服务器回答或至少尝试过.

Inc::STATS CConnection::_RecvData(sockaddr* addr, std::string &strData)
{
    int ret;            // return code
    int len;            // length of the data
    int fromlen;        // sizeof(sockaddr)
    char *buffer;       // will hold the data
    char c;

    //recv length of the message
    fromlen = sizeof(sockaddr);
    ret = recvfrom(m_InSock, &c, 1, 0, addr, &fromlen);
    if(ret != 1)
    {
#ifdef __MYDEBUG__
        std::stringstream ss;
        ss << WSAGetLastError();
        MessageBox(NULL, ss.str().c_str(), "", MB_ICONERROR | MB_OK);
#endif
        return Inc::ERECV; …
Run Code Online (Sandbox Code Playgroud)

c++ winsock

28
推荐指数
3
解决办法
6万
查看次数

VS 2012:Post Build xcopy错误2

我想让VS将构建过程后创建的.lib文件复制到特定文件夹.所以我去了项目配置,后期构建事件,并输入以下命令:

if exist $(TargetPath)
xcopy "$(TargetPath)" "C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\z.lib" /Y
Run Code Online (Sandbox Code Playgroud)

但是,在点击"构建"后,我没有收到复制过程,而是收到以下错误:

错误MSB3073:命令"如果存在C:\ Users\Incubbus\Documents\Visual Studio 2010\My Libraries\MyNetWorkProject\Debug\IncNetworkLibD.lib xcopy"C:\ Users\Incubbus\Documents\Visual Studio 2010\My Libraries\MyNetWorkProject\Debug\IncNetworkLibD.lib""C:\ Users\Incubbus\Documents\Visual Studio 2010\My Libraries\z.lib"/ Y

:VCEnd"退出代码2.

我也想知道:VCEnd错误信息的命令字符串< - 也许这就是原因?如何解决这个问题?

任何帮助和提示都会被愉快地消耗掉:)

部分解决方案

编辑:当xcopy询问这是一个文件还是一个目录时,它看起来像重命名部分(Inc.libto z.lib)造成麻烦...当我只是将原来命名的文件复制到一个目录而不是复制重命名时,它可以正常工作

msbuild xcopy post-build-event visual-studio visual-studio-2012

18
推荐指数
2
解决办法
4万
查看次数

如果将对象强制转换为实际类型,是否需要使用虚函数?

我的理解是,由于两个问题,虚函数可能会导致性能问题:vtable引起的额外derefencing以及编译器无法在多态代码中内联函数.

如果我将变量指针向下转换为其确切类型怎么办?那还有额外的费用吗?

class Base { virtual void foo() = 0; };
class Derived : public Base { void foo() { /* code */} };

int main() {
    Base * pbase = new Derived();
    pbase->foo(); // Can't inline this and have to go through vtable
    Derived * pderived = dynamic_cast<Derived *>(pbase);
    pderived->foo(); // Are there any costs due to the virtual method here?
}
Run Code Online (Sandbox Code Playgroud)

我的直觉告诉我,由于我将对象转换为其实际类型,编译器应该能够避免使用虚函数的缺点(例如,它应该能够内联方法调用,如果它想要).它是否正确?

在我转发后,编译器是否真的知道pderived是Derived类型的?在上面的例子中,看到pbase是Derived类型的微不足道,但在实际代码中它可能在编译时是未知的.

既然我已经写下来了,我想由于Derived类本身可以被另一个类继承,将pbase向下转换为Derived指针实际上并不能确保编译器的任何内容,因此它无法避免成本虚拟功能?

c++ performance inheritance vtable

13
推荐指数
2
解决办法
1018
查看次数

visual studio building error:未解析的外部符号_IID_IWICImagingFactory(MFC static lib)

我在SDI(启用Doc/View的)项目中写了一些带有几个标准对话框的porgram.

现在,我想把它发送给一些朋友,我确实设置了Use of MFC Use MFC in a static library.

但是当我尝试构建解决方案时,我收到以下错误:

错误LNK2001:未解析的外部符号_IID_IWICImagingFactory

我的问题是,我不知道这个接口id到底是什么,因为我没有手动编写任何COM代码或使用任何图像工厂的东西或相等...

我有点迷失了...

任何人都可以告诉我如何解决这个问题并使其与静态MFC使用一起工作?

提前致谢!

c++ mfc visual-studio-2010 unresolved-external visual-studio

12
推荐指数
2
解决办法
2万
查看次数

禁用警告c4702似乎不适用于VS 2012

我有一些测试代码,我提前添加了其余的代码,所以其余的代码永远不会在测试中达到.由于我设置了警告级别4,因此会产生c4702:无法访问代码警告

我试过像这样禁用:

//do something
    return 0;

    /*-------------------------------------------------------------------------*/

#pragma warning(disable: 4702)
    //real code
Run Code Online (Sandbox Code Playgroud)

但编译器仍然呻吟.因为我已经设置将每个警告都视为错误,这不会编译......

我正在使用Visual Studio 2012 Premium ...

任何帮助都将很高兴.

warnings compiler-warnings suppress-warnings visual-studio visual-studio-2012

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

如何推导出std :: move模板参数?

假设我们有:

foo(A&& a);
Run Code Online (Sandbox Code Playgroud)

如果你这样做

A a;
foo(a);
Run Code Online (Sandbox Code Playgroud)

它不会编译,抱怨不能将左值绑定到A &&.那很好.

但是,鉴于std :: move的签名,

template<class T> typename remove_reference<T>::type&& std::move(T&& a);
Run Code Online (Sandbox Code Playgroud)

看起来它需要一个右值引用,就像在foo中一样,为什么下面的代码符合?

A a;
std::move(a);
Run Code Online (Sandbox Code Playgroud)

是不是a一个左值?

furthur,据说编译将实例化:

typename remove_reference<A&>::type&& std::move(A& && a);
Run Code Online (Sandbox Code Playgroud)

我不明白为什么不是:

typename remove_reference<A>::type&& std::move(A && a);
Run Code Online (Sandbox Code Playgroud)

它看起来像是a类型A,而不是A&.

c++ templates c++11

9
推荐指数
2
解决办法
681
查看次数

使用函数指针的Specialize模板,取决于模板参数

我想有一个嵌套值的模板,应该由给定的初始化函数初始化:

template <typename T, T(INIT)()> struct Foo
{
    T value = INIT();
};
Run Code Online (Sandbox Code Playgroud)

它可以这样使用:

// Some random type only instanceable through factory()
struct Bar
{
    int bar{};
private:
    // The only way to create a Bar is through factory()
    friend Bar factory();
    Bar() {};
};

Bar factory() { return {}; }

Foo<Bar, factory> foo;
Run Code Online (Sandbox Code Playgroud)

但是,如果没有提供函数,模板应该尝试默认初始化嵌套值,所以我试图专门化模板:

template <typename T> struct Foo<T, nullptr>
{
    T value{};
};
Run Code Online (Sandbox Code Playgroud)

我的想法是这样使用它:

struct Baz{};

Foo<Bar, factory> foo; // Nested Bar have Bar::bar initialized through factory function. …
Run Code Online (Sandbox Code Playgroud)

c++ templates function-pointers

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

使用make_pair时,Visual Studio 2012中的c2664

我挖了一个旧项目并想编译它,但收到了几个错误,其中一些是c2664:

error C2664: 'std::make_pair' : cannot convert parameter 1 from 'CUser *' to 'CUser *&&'
error C2664: 'std::make_pair' : cannot convert parameter 1 from 'unsigned long' to ' unsigned long &&'
Run Code Online (Sandbox Code Playgroud)

相关的代码部分是:

//typedef for the userdata map
typedef std::map<unsigned long, std::pair<CUser*,userstatus*>> UserDataMapType;
//...
Inc::incret CUserManager::AddUser(unsigned long ID, CUser* pUser, userstatus* pUserStatus)
{
    //...
    std::pair<UserDataMapType::iterator, bool> ret = m_mapUserData.insert(std::make_pair<unsigned long, std::pair<CUser*, userstatus*>>(ID, std::make_pair<CUser*, userstatus*>(pUser, pUserStatus)));
    //...
}
Run Code Online (Sandbox Code Playgroud)

我试图制作函数参数const,但这没有帮助.

它确实在VS2010中编译得很好.

请帮我找到导致此问题的原因以及解决方法.

visual-c++ std-pair visual-studio-2012

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

检查包是否与.net核心兼容

我开始使用.NET Core和ASP.NET Core进行编程,在阅读了许多Docs/Tutorials后,我仍然不确定如何在我的.NET-Core-App中使用Nuget-(Meta-)软件包.

  1. 如何检查NuGet-Package是否与.NET Core兼容.例如经常列举的Newtonsoft JSON.它兼容/可用 - 以及如何看待它?
  2. 是否有所有可用.NET Core软件包的列表?

(就像这里列出的一些

.NET Core的关键NuGet包

).但是因为他们说这些是"key"包我会假设有更多.但是哪个?

nuget nuget-package .net-core asp.net-core

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

c++:让用户进程写入 LOCAL_SYSTEM 命名管道 - 自定义安全描述符

我有一个作为LocalSystem运行的服务,它在登录用户的会话中创建一个进程。然后该服务创建一个命名管道,客户端连接到该命名管道进行读写。根据https://msdn.microsoft.com/en-us/library/aa365600%28v=vs.85%29.aspx,客户端只能从管道中读取(它不是 Admin ,不是 Creator ,也不是 LocalSystem )。

我创建了一个安全描述符来授予用户读写访问权限。但这没有用。所以我尝试向每个人组授予读写访问权限。但这也行不通。我的客户端返回的错误代码始终是 ACCESS_DENIED (5)。

我很高兴知道我做错了什么。

编辑:如果我不创建自定义安全描述符并且只是打开管道,GENERIC_READ它就可以工作(但只能读取)。

EDIT2我想学习如何正确地做到这一点。我仍然希望成为只有登录用户才能写入的权限。不是每个人(这只是为了测试)。

服务代码(注释掉我用于获取用户 sid 的代码):

PSID EveryoneSID                      = nullptr;
        SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_WORLD_SID_AUTHORITY;
        if(!AllocateAndInitializeSid(&SIDAuthWorld, 1,
                                 SECURITY_WORLD_RID,
                                 0, 0, 0, 0, 0, 0, 0,
                                 &EveryoneSID))
        {
            throw(std::runtime_error("Failed to initialize group sid: " + std::to_string(GetLastError())));
        }

        //TOKEN_USER* tokeninfo     = nullptr;
        //DWORD tokeninfolen        = 0;
        //DWORD outlen              = 0;
        //// Query token info size
        //if(!GetTokenInformation(UserToken,
        //                  TokenUser,
        //                  tokeninfo,
        //                  tokeninfolen,
        //                  &outlen)) …
Run Code Online (Sandbox Code Playgroud)

c++ windows winapi authorization pipe

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