Tag: C#的

dynamic链接时共享库中的全局variables和静态variables会发生什么变化?

我想了解当全局variables和静态variables模块dynamic链接到应用程序时会发生什么。 通过模块,我的意思是每个项目在一个解决scheme(我工作了很多与Visual Studio!)。 这些模块是内置到* .lib或* .dll或* .exe本身。 我知道应用程序的二进制文件包含数据段中所有单个翻译单元(目标文件)的全局和静态数据(如果是const,则只读数据段)。 当这个应用程序使用带有加载时间dynamic链接的模块A时会发生什么? 我假设DLL有一个全局和静态的部分。 操作系统是否加载它们? 如果是这样,他们在哪里装载? 当应用程序使用带有运行时dynamic链接的模块B时会发生什么? 如果我的应用程序中有两个模块都使用A和B,那么是如下所述创build的A和B的全局variables的副本(如果它们是不同的进程)? A和B是否可以访问应用程序全局variables? (请说明你的理由) 从MSDN引用: 在DLL源代码文件中声明为全局的variables被编译器和链接器视为全局variables,但是加载给定DLL的每个进程都会获得该DLL全局variables的副本。 静态variables的范围仅限于声明静态variables的块。 因此,默认情况下,每个进程都有自己的DLL全局和静态variables的实例。 并从这里 : 在dynamic链接模块时,不清楚不同的库是否有自己的全局实例或者全局variables是否共享。 谢谢。

memcpy()vs memmove()

我想了解memcpy()和memmove()之间的区别,并且我已经阅读了memcpy()不考虑重叠源和目标的文本,而memmove()却是这样。 但是,当我在重叠的内存块上执行这两个函数时,它们都会给出相同的结果。 例如,在memmove()帮助页面上采取以下MSDN示例: – 有没有更好的例子来理解memcpy的缺点,以及memmove如何解决它? // crt_memcpy.c // Illustrate overlapping copy: memmove always handles it correctly; memcpy may handle // it correctly. #include <memory.h> #include <string.h> #include <stdio.h> char str1[7] = "aabbcc"; int main( void ) { printf( "The string: %s\n", str1 ); memcpy( str1 + 2, str1, 4 ); printf( "New string: %s\n", str1 […]

在C#中组合两个或多个字节数组的最佳方法

我有3个字节的数组,我需要合并成一个。 什么是完成这个任务最有效的方法?

我如何从C#调用C ++ / CLI?

我有一个用C ++实现的类,负责程序的算术计算,以及使用WPF的接口。 我用C#处理input,但是如何使用我的C ++类? 我已经看到了一些关于使一个托pipe的C ++包装类与它交互的意见,但我不知道从哪里开始。 我也不知道如何将其与所有其他代码一起编译。 我无法真正find关于这个的教程,并且在托pipeC ++上显示的东西并不是真的有帮助。 有什么可以帮助我的吗? 这对我来说似乎不合理。 编辑尝试m3rLinEz解决scheme,但它给我一个BadImageFormatException,我想这是因为该DLL不会生成。 我做了所有的事情,不知道发生了什么事。 有任何想法吗?

返回IQueryable <T>或不返回IQueryable <T>

我有一个存储库类,包装我的LINQ到SQL数据上下文。 存储库类是包含所有数据层逻辑(以及caching等)的业务线类。 这是我的回购界面的v1。 public interface ILocationRepository { IList<Location> FindAll(); IList<Location> FindForState(State state); IList<Location> FindForPostCode(string postCode); } 但是为了处理FindAll的分页问题,​​我在讨论是否公开IQueryable <ILocation>而不是IList来简化分页等情况的接口。 从数据仓库中暴露IQueryable的优点和缺点是什么? 任何帮助非常感谢。

如何在目标c中复制对象

我需要深层复制具有自己的对象的自定义对象。 我一直在阅读,有点困惑,如何inheritanceNSCopying和如何使用NSCopyObject。 有人能帮我吗? 谢谢阅读!

标准替代GCC的## __ VA_ARGS__技巧?

在C99中,可变macros的空参数有一个众所周知的 问题 。 例: #define FOO(…) printf(__VA_ARGS__) #define BAR(fmt, …) printf(fmt, __VA_ARGS__) FOO("this works fine"); BAR("this breaks!"); 上面的BAR()的使用根据C99标准确实是不正确的,因为它会扩展到: printf("this breaks!",); 注意尾随的逗号 – 不可行。 一些编译器(例如:Visual Studio 2010)将安静地摆脱尾随的逗号。 其他编译器(例如:GCC)支持在__VA_ARGS__放置## ,如下所示: #define BAR(fmt, …) printf(fmt, ##__VA_ARGS__) 但是有没有符合标准的方法来获得这种行为? 也许使用多个macros? 现在, ##版本似乎得到了很好的支持(至less在我的平台上),但是我更愿意使用符合标准的解决scheme。 先发制人:我知道我只能写一个小function。 我正在尝试使用macros来做到这一点。 编辑 :这是一个例子(虽然简单)为什么我想要使用BAR(): #define BAR(fmt, …) printf(fmt "\n", ##__VA_ARGS__) BAR("here is a log message"); BAR("here is a […]

asynchronous/等待与BackgroundWorker

在过去的几天里,我testing了.net 4.5和c#5的新特性。 我喜欢它的新asynchronous/等待function。 早些时候,我曾经使用BackgroundWorker在响应式UI的背景下处理更长的stream程。 我的问题是:有了这些很好的新function,什么时候应该使用async / await和BackgroundWorker ? 哪两个都是常见的情况?

我应该select哪种密码散列函数?

.NET框架提供了6种不同的哈希algorithm: MD5:16字节(散列时间500MB:1462毫秒) SHA1:20个字节(1644毫秒) SHA256:32个字节(5618毫秒) SHA3​​84:48个字节(3839毫秒) SHA512:64个字节(3820毫秒) RIPEMD:20个字节(7066毫秒) 这些function中的每一个function都不相同 MD5是最快的,RIPEMD是最慢的。 MD5的优点是它适合内置的Guidtypes。 这使得它很容易用于识别。 然而,MD5很容易受到碰撞攻击 ,SHA1也是脆弱的,但程度较低。 我应该在什么条件下使用散列algorithm? 具体问题我真的很好奇,看到回答是: MD5不被信任? 在正常情况下,当你使用MD5algorithm而没有恶意的意图,没有任何第三方有任何恶意的意图时,你会期待任何冲突(意味着两个任意字节[]产生相同的散列) RIPEMD比SHA1好多less? (如果它更好)计算速度慢5倍,但散列大小与SHA1相同。 散列文件名(或其他短string)时获得非恶意冲突的几率是多less? (例如,具有相同MD5散列的2个随机文件名)(使用MD5 / SHA1 / SHA2xx)一般来说,非恶意冲突的几率是多less? 这是我使用的基准: static void TimeAction(string description, int iterations, Action func) { var watch = new Stopwatch(); watch.Start(); for (int i = 0; i < iterations; i++) { func(); } watch.Stop(); Console.Write(description); […]

什么是位掩码?

我对C编程相当陌生,并且遇到了位掩码的问题。 有人能向我解释位掩码的一般概念和function吗? 例子非常感谢。