小编Dan*_*Dan的帖子

默认C#字符串编码

我在C#中遇到了一些默认字符串编码的问题.我需要从某些文件/数据包中读取字符串.但是,这些字符串包括128-256范围内的字符(扩展ascii),并且所有这些字符都显示为问号,而不是正确的字符.例如,在读取字符串时,它可能会显示为"S?meStr?n?" 如果字符串包含扩展的ascii字符.

现在,有没有办法更改我的应用程序的默认编码?我知道在java中你可以从命令行定义默认字符集.

c# string

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

使用Visual Studio 2015进行调试时,无法在视图中编辑C#代码

我一直在测试Visual Studio 2015的单个版本(从第一个CTP到CTP6),虽然它很好,但最让我烦恼的一件事是我在调试时不再能够在视图中编辑C#代码.我可以复制粘贴代码,但是一旦进入,我就无法删除它或更改它,除非我破坏所有线程或停止调试.

我在谷歌或MSDN论坛上找不到任何东西 - 希望有人在这里知道原因.

在VS2015完全发布之前,此功能是否被禁用,是否有错误,或者与我的设置有关?我已经尝试过在安全模式下运行,重新安装等等.我已经在很多PC上尝试过,所有这些都有相同的结果.

visual-studio visual-studio-2015 asp.net-core

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

从 VTable 调用 struct 中的非托管函数

是否可以从 C# 调用函数到结构中的非托管函数(通过 VTable)。

例如,我正在挂接一个应用程序,我正在为每个类(应用程序的)重新创建结构。

public struct SomeStruct {
   [FieldOffset(0x00)]
   public IntPtr * VTable;

   [FieldOffset(0x10)]
   public uint SomeValue;
}
Run Code Online (Sandbox Code Playgroud)

然后,我通常这样做:

var * data = (SomeStruct*)(Address);
Run Code Online (Sandbox Code Playgroud)

我希望通过以下任一方式从结构的 VTable 调用函数

Invoke<delegate>(data->VTable[0x3C])(delegateArguments)
Run Code Online (Sandbox Code Playgroud)

或者

var eax = Invoke<Func<uint,uint>(data->VTable[0x3C])(arg1,arg2)
Run Code Online (Sandbox Code Playgroud)

此外,这是否可以有效地完成(因为这些 vtable 函数可以被多次调用)?

也许通过反射发射?

据我所知,每次调用Invoke<>func时,编组都必须创建委托函数。

.net c# unmanaged vtable

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

Win32_ProcessStartTrace的ManagementEventWatcher不再适用于Win 8.1

在过去的几个月里,我一直在使用ManagementEventWatcher来监视新流程的开始,并且它没有任何问题.但是,我刚刚再次尝试了我的应用程序,似乎新进程的事件不再被调用.

以下是示例代码:

   var startWatch = new ManagementEventWatcher(new WqlEventQuery("SELECT * FROM Win32_ProcessStartTrace"));
Run Code Online (Sandbox Code Playgroud)

事件:

private static void ProcessStart_EventArrived(object sender, EventArrivedEventArgs e)
{
            Console.WriteLine("AppStarted");
}
Run Code Online (Sandbox Code Playgroud)

我还在另一个朋友的机器(也是Win 8.1)上测试了这个机器,它有一个旧的二进制文件(在过去的几个月中也运行得很好),他也不再接收这些事件了.

这个问题似乎只存在于Win32_ProcessStartTrace中,因为Win32_ProcessStopTrace工作得很好,并在进程停止时接收事件.

最近是否有任何Windows更新可能会干扰这个?我的系统的env自上次工作以来没有改变(除了赢得更新).

.net c# wmi

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

Linux 上的 .NET Core 命名管道问题(地址已在使用)

我正在研究使用命名管道来控制在 linux 下运行的 .net 核心应用程序的某些方面(例如:触发保存、关闭等)。

我正在尝试NamedPipeServerStream在应用程序内部创建一个,但是它总是失败并显示以下消息:(Address already in use我尝试了不同的名称,没有任何帮助)。

我还尝试使用创建临时管道/tmp/somepipename,但是这也失败并显示以下消息:The name of a pipe on this platform must only include characters valid in file names.

通过查看命名管道的 .NET Core 测试,这应该不是问题,因为它们也用于Path.GetTemporaryFileName()生成临时管道

这是用法:NamedPipeTestBase.cs

这是实现GetUniquePipeNamePipeTestBase.cs

以防万一,这是我正在使用的代码(一个班轮,非常简单):

_pipe = new NamedPipeServerStream("somepipename", PipeDirection.InOut,1);
Run Code Online (Sandbox Code Playgroud)

我做错了什么,或者命名管道还没有完全为 Linux 实现?

.net c# .net-core

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