小编Nic*_*ick的帖子

C#如何查找事件是否已连接

我希望能够找出一个事件是否被连接起来.我环顾四周,但我只找到了涉及修改包含事件的对象内部的解决方案.我不想这样做.

这是一些我认为可行的测试代码:

// Create a new event handler that takes in the function I want to execute when the event fires
EventHandler myEventHandler = new EventHandler(myObject_SomeEvent);
// Get "p1" number events that got hooked up to myEventHandler
int p1 = myEventHandler.GetInvocationList().Length;
// Now actually hook an event up
myObject.SomeEvent += m_myEventHandler;
// Re check "p2" number of events hooked up to myEventHandler
int p2 = myEventHandler.GetInvocationList().Length;
Run Code Online (Sandbox Code Playgroud)

不幸的是上面是错误的.我认为,当我将一个事件挂钩时,myEventHandler中的"invocationList"会自动更新.但不,事实并非如此.它的长度总是以一个为单位.

无论如何从包含事件的对象外面确定这个?

c# hook event-handling

37
推荐指数
4
解决办法
6万
查看次数

C#:如何将null传递给期望ref的函数?

我有以下功能:

public static extern uint FILES_GetMemoryMapping(
    [MarshalAs(UnmanagedType.LPStr)] string pPathFile,
    out ushort Size,
    [MarshalAs(UnmanagedType.LPStr)] string MapName,
    out ushort PacketSize,
    ref Mapping oMapping,
    out byte PagesPerSector);
Run Code Online (Sandbox Code Playgroud)

我想这样称呼:

FILES_GetMemoryMapping(MapFile, out size, MapName,
    out PacketSize, null, out PagePerSector);
Run Code Online (Sandbox Code Playgroud)

不幸的是,我无法传递null一个需要类型的字段ref Mapping而且没有投射我已经尝试修复此问题.

有什么建议?

c# parameters null pinvoke ref

33
推荐指数
4
解决办法
4万
查看次数

使用Rfc2898DeriveBytes在C#中实现PBKDF2

伙计们,我正在尝试在C#中实现一个创建WPA共享密钥的PBKDF2函数.我在这里找到了一些:http://msdn.microsoft.com/en-us/magazine/cc163913.aspx似乎产生了一个有效的结果,但是它的一个字节太短......而且错误的PSK值.

为了测试输出,我将其与此进行比较:http://www.xs4all.nl/~rjoris/wpapsk.htmlhttp://anandam.name/pbkdf2/

我确实找到了一种方法来使用C#内置库来调用Rfc2898DeriveBytes.使用这个,我得到一个有效的输出:

Rfc2898DeriveBytes k3 = new Rfc2898DeriveBytes(pwd1, salt1, 4096);
byte[] answers = k3.GetBytes(32);
Run Code Online (Sandbox Code Playgroud)

现在,我使用Rfc2898DeriveBytes的一个限制是"盐"必须是8个八位字节长.如果它更短,则Rfc2898DeriveBytes会抛出异常.我想我所要做的就是将盐(如果它更短)填充到8个字节,我会很好.但不是!我已经尝试了几乎所有填充与较短盐的组合,但我不能复制我从上面这两个网站得到的结果.

那么底线是,这是否意味着Rfc2898DeriveBytes只是不能使用短于8个字节的源盐?如果是这样,有没有人知道我可以使用哪些C#代码为WPA预共享密钥实现PBKDF2?

c# pbkdf2 rfc2898

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

具有不同设置和获取类型的访问器?

简单的问题,希望是一个简单的答案:

我想做以下事情:

private DateTime m_internalDateTime;
public var DateTimeProperty
{
   get { return m_internalDateTime.ToString(); } // Return a string
   set { m_internalDateTime = value; } // here value is of type DateTime
}
Run Code Online (Sandbox Code Playgroud)

以上只是我想要做的一个例子.我想要一个x类型的内部变量的公共访问器.我希望将该变量作为字符串获取,但使用x类型设置它.

这可能吗?

- 编辑 -

我才意识到我可以做一些像:

private DateTime m_internalDateTime;
public object DateTimeProperty
{
   get { return m_internalDateTime.ToString(); } // Return a string
   set { m_internalDateTime = (DateTime)value; } // here value is of type DateTime
}
Run Code Online (Sandbox Code Playgroud)

但是,假设我使用类型y而不是"字符串"作为我的"获取"类型.如果我想在我的代码中使用"DateTimeProperty",我必须抛出它.

c# variables types accessor

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

为Linux创建可移植Python(本地安装)

我想创建以下内容:

可以在任何系统上运行的python的可移植版本(使用任何以前版本的python或者没有安装python)并且预先配置了各种python包(例如,django,lxml,pysqlite等)

我发现上面最接近的是virtualenv,但这只是到目前为止.

如果我在一台机器上为python打包一个很好的virtualenv,它包含了它需要的许多库的sym链接.我可以把那些sym链接转换成他们的实际文件,但是如果我尝试将整个目录移动到另一台机器,我会在seg故障后得到seg故障.

要在另一台机器上启动python,我正在使用:

LD_LIBRARY_PATH=lib/ ./bin/python
Run Code Online (Sandbox Code Playgroud)

在lib /我有我从原始机器复制的所有共享库.这里的问题是这些共享库可能依赖于我不包括的其他共享库,因此在其他Linux发行版上执行此操作不起作用.可能是由于它回退到系统上安装的旧共享库,这些库不能与我复制的内容一起使用.

任何人都知道如何使这个工作?这甚至可能吗?

编辑:

为了澄清,期望的结果是创建一个python二进制文件的tar.gz和相关的包(django,lxml,pysqlite等),可以在任何基于Linux的系统上提取和运行,即(ubuntu 8.04,redhat 5,suse) 11等),所有32位发行版,其中本地安装的python版本不会影响tar.gz中的内容.

python django portability virtualenv

12
推荐指数
2
解决办法
1万
查看次数

在程序代码中安全地存储密码?

我的应用程序使用RijndaelManaged类来加密数据.作为此加密的一部分,我使用加载了密码的SecureString对象,该密码可以转换为字节数组并在运行时加载到RajindaelManaged对象的Key中.

我的问题是存储此SecureString.用户输入的密码可以在运行时输入,并且可以"安全"加载到SecureString对象中,但如果没有给出用户输入的密码,那么我需要默认为某些东西.

所以问题最终归结为:

如果每次我的应用程序运行时都必须将一些已知的字符串或字节数组加载到SecureString对象中,我该怎么做?"加密"数据最终会被另一个应用程序解密,因此即使没有指定用户输入密码,我仍然需要在从一个应用程序转到另一个应用程序时对数据进行加密.这意味着我不能将默认密码设为随机,因为其他应用程序无法正确解密它.

我正在考虑的一个可能的解决方案是创建一个仅发出单个密码的dll,然后我使用该密码并在运行时通过几个不同的散列/重组函数运行它,然后我最终将其提供给secureString对象.这会足够安全吗?

编辑为清晰起见*:加密数据通过机器之间的文件传递.可以将其视为一个始终具有密码的Zip文件,如果用户没有直接输入任何密码,则假定为默认密码.

.net c# security store securestring

11
推荐指数
3
解决办法
9579
查看次数

.NET安全内存结构

我知道.NET库提供了一种以受保护/安全的方式存储字符串的方法= SecureString.

我的问题是,如果我想存储一个字节数组,那么保存这个数据的最佳,最安全的容器是什么?

c# memory security object

9
推荐指数
2
解决办法
7437
查看次数

C++以两种不同的方式从类中实例化一个对象

我很确定之前曾经问过这个问题,但我不能通过搜索找到它.

所以这里:

有什么区别:

MyObj myObj;
Run Code Online (Sandbox Code Playgroud)

MyObj myObj = MyObj();
Run Code Online (Sandbox Code Playgroud)

我相信两者都能达到相同的效果,但是比另一种更好用吗?假设我想要的只是默认构造函数.

*编辑 - 我听说第一个更合适,因为第二个首先通过默认构造函数创建一个对象,然后分配给myObj.第一个没有"分配"操作,因此第一个将"更快".真相?

c++ constructor object instantiation

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

Python Enum类(使用tostring fromstring)

我找到了一种简单的方法来实现(破解)枚举到Python:

class MyEnum:
  VAL1, VAL2, VAL3 = range(3)
Run Code Online (Sandbox Code Playgroud)

我可以这样称呼它:

bob = MyEnum.VAL1
Run Code Online (Sandbox Code Playgroud)

性感!

好吧,现在我希望能够在给定字符串时获得数值,或者如果给定数值则获得字符串.假设我希望字符串与Enum键完全匹配

我能想到的最好的是这样的:

class MyEnum:
  VAL1, VAL2, VAL3 = range(3)
  @classmethod
  def tostring(cls, val):
    if (val == cls.VAL1):
      return "VAL1"
    elif (val == cls.VAL2):
      return "VAL2"
    elif (val == cls.VAL3):
      return "VAL3"
    else:
      return None
  @classmethod
  def fromstring(cls, str):
    if (str.upper() == "VAL1"):
      return cls.VAL1
    elif (str.upper() == "VAL2"):
      return cls.VAL2
    elif (str.upper() == "VAL2"):
      return cls.VAL2
    else:
      return None
Run Code Online (Sandbox Code Playgroud)

或类似的东西(忽略我如何捕捉无效案件)

有没有更好的,更蟒蛇为中心的方式去做我上面做的事情?或者以上内容已经尽可能简洁.

似乎必须有一个更好的方法来做到这一点.

python enums tostring

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

使用webpack将供应商库拆分为多个块

我想将我的供应商代码分成两个块,一个包含所有角度库,另一个包含其他所有内容.

我的角度应用程序有一个入口点,设置如下:

entry: {
    app: './path_to/app.js',
    vendor: ['jquery', 'moment', 'numeral'],
    'vendor.angular': ['angular', 'angular-route', 'angular-numeraljs']
}
Run Code Online (Sandbox Code Playgroud)

然后我使用CommonsChunkPlugin配置另外两个bundle:

new webpack.optimize.CommonsChunkPlugin({
    name: 'vendor',
    chunks: ['app'],
    warnings: false,
    filename: 'vendor.bundle.js'
})
new webpack.optimize.CommonsChunkPlugin({
    name: 'vendor.angular',
    chunks: ['app'],
    warnings: false,
    filename: 'vendor.angular.bundle.js'
})
Run Code Online (Sandbox Code Playgroud)

这会生成3个文件:

Version: webpack 1.13.1
Time: 12719ms
                   Asset     Size  Chunks             Chunk Names
           app.bundle.js  19.2 kB       0  [emitted]  app
        vendor.bundle.js   484 kB       1  [emitted]  vendor
vendor.angular.bundle.js   652 kB       2  [emitted]  vendor.angular
   [0] multi vendor.angular 124 bytes {2} [built]
   [0] multi vendor 88 bytes {1} …
Run Code Online (Sandbox Code Playgroud)

javascript node.js angularjs webpack commonschunkplugin

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