小编Rog*_*ers的帖子

为只读命名管道启用MessageMode时的C#UnauthorizedAccessException(NamedPipeClientStream类)

NamedPipeClientStream.NET中的类存在问题,因为您无法使用该类创建此实例PipeDirection.In,然后成功更改ReadModePipeTransmissionMode.Message.

试图这样做将提高UnauthorizedAccessException.虽然管道通常用于在进程之间进行通信,但是在单个进程中的这个简单示例显示了问题:

var pipeOut = new NamedPipeServerStream("SomeNamedPipe", 
                                        PipeDirection.Out, 
                                        1, 
                                        PipeTransmissionMode.Message);
var pipeIn = new NamedPipeClientStream(".", 
                                       "SomeNamedPipe", 
                                       PipeDirection.In);
pipeIn.Connect();
pipeIn.ReadMode = PipeTransmissionMode.Message;
Run Code Online (Sandbox Code Playgroud)

UnauthorizedAccessException尝试设置ReadMode属性时,此代码将抛出一个.


在搜索有关此问题的信息时,我在其他地方找到了对它的引用,例如:

所有这些帖子都提到这是"奇怪的","奇怪的"等,但不解释"为什么"它不起作用,并且都给出相同的解决方法,"出于一些奇怪的原因"设置管道方向以InOut使得它的工作.

确实,这确实使它工作,但它需要从根本上改变管道的两端定义到全双工,而不是单向,我认为这是一个非常差的方法,除非你是能够更改客户端和服务器,这甚至可能是不可能的.


我的问题是,为什么在入站管道上启用消息模式会导致异常,是否有更好的方法来解决此问题,而不是将管道更改为双向模式?

.net c# named-pipes

13
推荐指数
1
解决办法
2919
查看次数

是否可以编写C++模板来检查构造函数的存在?

这个问题本质上是来自另一个用户的这个问题的后续问题,它有一些很好的答案: 是否可以编写模板来检查函数的存在?

我想完全按照这个问题描述,除了我希望能够为构造函数做到这一点.例如,鉴于以下两种类型:

class NormalType
{
public:
    NormalType()
    {
        std::cout << "NormalType::NormalType()" << std::endl;
    }
};

class SpecialType
{
public:
    SpecialType()
    {
        std::cout << "SpecialType::SpecialType()" << std::endl;
    }
    SpecialType(int someArg)
    {
        std::cout << "SpecialType::SpecialType(int someArg)" << std::endl;
    }
};
Run Code Online (Sandbox Code Playgroud)

这个辅助函数用于构造一个对象:

template<class T>
class ConstructHelper
{
public:
    template<bool HasSpecialConstructor>
    static T Construct()
    {
        return T();
    }
    template<>
    static T Construct<true>()
    {
        return T(int(42));
    }
};
Run Code Online (Sandbox Code Playgroud)

我希望能够编写如下代码:

NormalType normalType = ConstructHelper<NormalType>::Construct<has_special_constructor<NormalType>::value>();
SpecialType specialType = ConstructHelper<SpecialType>::Construct<has_special_constructor<SpecialType>::value>();
Run Code Online (Sandbox Code Playgroud)

NormalType::NormalType()调用所需结果的地方,并SpecialType::SpecialType(int someArg)调用.这里缺少的成分是关键has_special_constructor帮助器,它可以确定我们的特殊构造函数是否存在给定类型. …

c++ templates decltype sfinae visual-studio-2013

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

标签 统计

.net ×1

c# ×1

c++ ×1

decltype ×1

named-pipes ×1

sfinae ×1

templates ×1

visual-studio-2013 ×1