小编B L*_*B L的帖子

Visual Studio 2012安装约束

在尝试安装Visual Studio 2012时,我注意到它需要占用我的启动盘的很大一部分作为安装的先决条件:

在此输入图像描述

它需要的驱动器驱动器上的磁盘空间比它生存的目录多一倍!这种疯狂是什么?

做一些搜索,我找到了一个类似问题的用户,但他只能通过卸载所有额外的驱动器来解决他的问题,然后启动安装程序.据推测,他在要安装的驱动器上有一个操作系统.我不.(并且也不想).他的困境在这里概述:https://stackoverflow.com/questions/14466787/why-does-visual-studio-install-onto-multiple-drives

根据上面问题中的建议,我将所有"临时"目录引用移动到指向"E:\"驱动器,尝试将其强制关闭"C:\",如下所示:

在此输入图像描述

但没有骰子.据记载,文件只是暂时的; 如果是这种情况,为什么它坚持将大量文件放到我的启动盘上?我没关系,除了我没有6千兆字节的空间用于这个安装,并且不能足够自由地让它做它的事情.这个磁盘来自消费者固态硬盘的早期阶段,因此这些选择很小,这很好,因为我从来没有想过它可以容纳饥饿的应用程序.

有什么我可以做的,没有扩展磁盘,或荒谬卸载一堆其他应用程序,安装Visual Studio,然后重新安装其他应用程序?考虑到我在另一个驱动器上有太字节的空间,这是一个特别令人沮丧的问题;)

windows installation visual-studio-2012

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

SerialPort.ReadTo()上的ArgumentOutOfRangeException

ArgumentOutOfRangeException: Non-negative number required.调用类的ReadTo()方法时,我的代码不确定地抛出SerialPort:

public static void RetrieveCOMReadings(List<SuperSerialPort> ports)
{
    Parallel.ForEach(ports, 
        port => port.Write(port.ReadCommand));

    Parallel.ForEach(ports,
        port =>
        {
            try
            {
                // this is the offending line.
                string readto = port.ReadTo(port.TerminationCharacter);

                port.ResponseData = port.DataToMatch.Match(readto).Value;
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
                port.ResponseData = null;
            }
        });
}
Run Code Online (Sandbox Code Playgroud)

SuperSerialPortSerialPort类的扩展,主要用于保存端口上每个设备特定的通信所需的信息.
一个端口总是有TerminationCharacter定义的;
大部分时间它都是换行符:

在此输入图像描述

我不明白为什么会这样.
如果ReadTo无法找到输入缓冲区中指定的字符,那么它不应该只是超时并且不返回任何内容吗?


StackTrace指向mscorlib中的一个违规函数,在SerialPort类的定义中:

System.ArgumentOutOfRangeException occurred
  HResult=-2146233086
  Message=Non-negative number required.
Parameter name: byteCount
  Source=mscorlib
  ParamName=byteCount
  StackTrace:
       at System.Text.ASCIIEncoding.GetMaxCharCount(Int32 byteCount)
  InnerException:
Run Code Online (Sandbox Code Playgroud)

我跟着它,这就是我发现的:

private int …
Run Code Online (Sandbox Code Playgroud)

.net c# serial-port winforms parallel.foreach

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

用于导入.dll的C#包装器,"尝试读取或写入受保护的内存"

经过大量的研究和实验,我仍然无法弄清楚我从外部库中访问未管理的函数时遇到的问题.

快速相关的背景故事:我在Visual C++中编写了一个应用程序,用于驱动通过USB连接到系统的外部仪表,但正在虚拟化串口,我注意到了奇怪的输出行为.为了维护自己,制造商希望我使用他们的.dll来控制我的应用程序中的仪表.很好,但....

我无法直接将此.dll作为参考包含(名称和路径已删除):在此输入图像描述

所以为了使用它,我想起了DllImport.我决定将自己的程序集作为驱动程序的包装器,而不是将代码直接包含在我的应用程序中,因此我可以通过类访问该功能.在.dll上执行dumpbin/exports之后,我找到了所有函数的入口点,并创建了一个C#类库,只包括相关的示例:

namespace Meter
{
    public class PortDrv
    {

        [DllImport("PortDrv.dll", EntryPoint = "SERIALNUMBER",
            CallingConvention = CallingConvention.StdCall,
            CharSet = CharSet.Auto)]
        public static extern long SerialNumber(Byte Index);

        [DllImport("PortDrv.dll", EntryPoint = "OPENPORT",
            CallingConvention = CallingConvention.StdCall,
            CharSet = CharSet.Auto)]
        public static extern int OpenPort();

    };
}
Run Code Online (Sandbox Code Playgroud)

函数原型是从他们发给我描述他们库的.pdf中提取的:

SERIALNUMBER (ByVal Index As Byte) As Long
OPENPORT () As Integer
Run Code Online (Sandbox Code Playgroud)

并且还用于他们的示例VB程序:

Private Declare Function SerialNumber Lib "PortDrv" Alias "SERIALNUMBER" (Index As Byte) As Long
Private Declare Function OpenPort Lib "PortDrv" Alias "OPENPORT" () …
Run Code Online (Sandbox Code Playgroud)

.net c# vb6 dll pinvoke

4
推荐指数
1
解决办法
1240
查看次数

声明数组列表时指定大小

正如问题所述,是否有另一种方法可以做到这一点?:

decimal[] decimal_array = new decimal[12];
List<decimal> decimal_list = new List<decimal>(3);

// want to combine the two
List<decimal[]> decimal_list_array = new List<decimal[12]>(3); // doesn't compile
Run Code Online (Sandbox Code Playgroud)

我明白这不会起作用,因为"decimal [12]"不是一个类型,但是当我声明它时,设置结构的大小会很简洁,而不必写decimal_list_array.Add(new decimal[12])一堆次.

我希望能够通过索引上的每个主要操作实例在列表中的对象,但否则我不关心的实际对象的顺序列表中.

编辑:结构的初始大小在声明时将是已知的,但这只是最小的实例数 List<decimal[]>

.net c# arrays list

0
推荐指数
1
解决办法
63
查看次数