我在C#中遇到了一些默认字符串编码的问题.我需要从某些文件/数据包中读取字符串.但是,这些字符串包括128-256范围内的字符(扩展ascii),并且所有这些字符都显示为问号,而不是正确的字符.例如,在读取字符串时,它可能会显示为"S?meStr?n?" 如果字符串包含扩展的ascii字符.
现在,有没有办法更改我的应用程序的默认编码?我知道在java中你可以从命令行定义默认字符集.
我一直在测试Visual Studio 2015的单个版本(从第一个CTP到CTP6),虽然它很好,但最让我烦恼的一件事是我在调试时不再能够在视图中编辑C#代码.我可以复制粘贴代码,但是一旦进入,我就无法删除它或更改它,除非我破坏所有线程或停止调试.
我在谷歌或MSDN论坛上找不到任何东西 - 希望有人在这里知道原因.
在VS2015完全发布之前,此功能是否被禁用,是否有错误,或者与我的设置有关?我已经尝试过在安全模式下运行,重新安装等等.我已经在很多PC上尝试过,所有这些都有相同的结果.
是否可以从 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时,编组都必须创建委托函数。
在过去的几个月里,我一直在使用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自上次工作以来没有改变(除了赢得更新).
我正在研究使用命名管道来控制在 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
这是实现GetUniquePipeName:PipeTestBase.cs
以防万一,这是我正在使用的代码(一个班轮,非常简单):
_pipe = new NamedPipeServerStream("somepipename", PipeDirection.InOut,1);
Run Code Online (Sandbox Code Playgroud)
我做错了什么,或者命名管道还没有完全为 Linux 实现?