小编AC.*_*AC.的帖子

从Dictionary <string,object>初始化类型为T的对象

我正在寻找更通用/"标准"的方式来从一组对字符串,对象实例化某种类型T的对象.对我来说,看起来应该有一些众所周知的方法,但我找不到它,所以我想出了这段代码.有人知道更好的事吗?

// usage
public class test
    {
    public int field1;
    public string field2;
    public bool field3;
    public string[] field4;
    public IDictionary<string,object> field5 { get; set; }

    public static IDictionary<string,object> dynamic()
        {
        return new Dictionary<string,object>{
            { "field1", 2 },
            { "field2", "string" },
            { "field3", true },
            { "field4", new[] { "id3", "id4", "id5" } },
            { "field5", new Dictionary<string,object>{ { "id1", "" } } }
            };
        }
    }

...
var r = new dynamic_data_serializer<test>().create( test.dynamic() );
...

// 
public class …
Run Code Online (Sandbox Code Playgroud)

c# reflection serialization json

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

!堆失败了.ntdll!_HEAP_ENTRY的类型信息无效

我正在尝试从位于Windows Server 2003 SP2 x86上的完整转储内存文件中转储堆信息.转储是为在Windows Server 2003 SP2 x64计算机上运行的32位混合(本机/ clr)应用程序创建的.

从以下windbg日志中我了解到加载的ntdll.dll映像不正确,并且与ntdll.pdb符号不对应.我试图从目标机器指定ntdll.dll的位置,但windbg仍显示模块是从标准位置(c:\ windows\system32)加载的.

我做错了什么?如何强制windbg加载正确的版本ntdll


Microsoft (R) Windows Debugger Version 6.11.0001.404 X86
Copyright (c) Microsoft Corporation. All rights reserved.

[ ... skipped ... ]

0:042> vertarget
Windows Server 2003 Version 3790 (Service Pack 2) MP (4 procs) Free x86 compatible
Product: Server, suite: TerminalServer SingleUserTS
kernel32.dll version: 5.2.3790.4480 (srv03_sp2_gdr.090321-1244)
Machine Name:
Debug session time: Wed Mar 16 16:36:10.000 2011 (GMT-5)
System Uptime: 17 days 10:34:26.068
Process Uptime: 1 days 15:19:14.000 …
Run Code Online (Sandbox Code Playgroud)

debugging heap windbg

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

结构化异常处理程序 (SEH) 无法捕获堆损坏

我正在编写一个小型实用程序(VC 2010,无 clr),它使用第 3 方库执行一项简单的任务(光栅化)。稍后的实用程序将被更大的应用程序使用。有时,该实用程序会因第 3 方库中的某些堆损坏而崩溃。没关系,但 Windows (Vista/2008) 显示众所周知的对话框“程序已停止工作...关闭/调试程序”。这不适合我的情况(服务器端)。实用程序应该静默地崩溃/终止,没有任何可见的影响。

为此,我为未处理的异常安装了 SEH (SetUnhandledExceptionFilter)。对于 AV ( *(PDWORD)0 = 0 ) 等异常,可以完美调用该处理程序,但由于某种原因,在堆损坏的情况下不会调用该处理程序。卸载第 3 方库 dll 之一的 dllmain 时发生损坏。

有几个问题。谁能解释为什么不调用处理程序?还有其他方法可以阻止该对话框吗?

c++ exception seh structured-exception heap-corruption

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

如何在C++/CLI中检查泛型类型?

在C++/CLI代码中,我需要检查类型是否是特定的泛型类型.在C#中它将是:

public static class type_helper {
    public static bool is_dict( Type t ) {
        return t.IsGenericType
            && t.GetGenericTypeDefinition() == typeof(IDictionary<,>);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是在cpp ++\cli中它的工作方式不同,编译器会显示语法错误:

class type_helper {
public:
    static bool is_dict( Type^ t ) {
        return t->IsGenericType && t->GetGenericTypeDefinition()
            == System::Collections::Generic::IDictionary<,>::typeid;
    }
};
Run Code Online (Sandbox Code Playgroud)

我找到的最好方法是比较这样的字符串:

class type_helper {
public:
    static bool is_dict( Type^ t ) {
        return t->IsGenericType
            && t->GetGenericTypeDefinition()->Name == "IDictionary`2";
    }
};
Run Code Online (Sandbox Code Playgroud)

有人知道更好的方法吗?

PS:c ++\cli中的typeof(typeid)是否有限制,或者我不知道"正确"的systax?

generics c++-cli typeid

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

为什么Mono实施WCF?

为什么Mono项目 "按原样" 实现WCF接口和类?

我不明白重复微软的设计是什么意思.我的经验表明,WCF是一个庞大的框架,其实现基于SOAP服务.他们的方法存在很多问题.它简直不适合简单的HTTP请求处理周期.为什么不试着发明一个更好的框架呢?

更新:

好的我明白了.:)我喜欢.NET平台,C#和我喜欢这个平台可以在另一个操作系统上使用,但是......

难道你们不是看到原始(微软)框架中的许多东西可以做得更好吗?看看System.ServiceModel.Channels.Message.这是定制景观的重要内容之一.

为什么我到处都看到XML?我怎样才能轻松地对这样的课程做任何事情?这是可行的,但我不能说这是一个通用通信框架的好设计.我认为Mono项目的目的不仅仅是将.NET生态系统带入unix*,而是让它变得更好.

mono wcf monodevelop

2
推荐指数
3
解决办法
4017
查看次数