不正确的编组:C#数组到C ++非托管数组

我有以下C#代码,其中包含结构定义(CInput),obj定义和init,以及对C ++(本机)DLL函数的调用(也是由我编写的)。 //C# code public struct CInput { [MarshalAsAttribute(UnmanagedType.R8)] public double Time; [MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_R8)] public double[] Database; /* other similar fields*/ } CInput Inputs = new CInput(); /* init of Inputs fields*/ int bfr = Example(ref Inputs); //’Example’ being the C++ DLL call Messagebox.Show(bfr.ToString()); 编组第二个参数时出错,我不知道在哪里。 然后: //C++ code struct CInput { double Time; […]

PrimaryScreen.Size的问题

我已经使用Screen.PrimaryScreen.Bounds.Size一段时间了,但是在连接到我的大屏幕电视的Windows7电脑上,它给了我不正确的值。 我在其他地方读过尝试SystemInformation.PrimaryMonitorSize但它给出了相同的值。 当我右键单击桌面以获得屏幕分辨率时,它表示1920×1080 。 以上两个给我1280×720 。 我也试过WPF版本: var w = System.Windows.SystemParameters.PrimaryScreenWidth; var h = System.Windows.SystemParameters.PrimaryScreenHeight; MessageBox.Show(new Size((int)w, (int)h).ToString()); 显示尺寸已通过(右键单击桌面) Personalize > Desktop选项更改为150%(因为屏幕为60“并且您坐得很远)。 如何检测这个,以便从上面返回的值可以调整? 注意 :我已经发现如何通过右键单击可执行文件来解决这个问题,并调整兼容性以禁用DPI虚拟化,但我仍然需要一个程序化解决方案,所以我不必让用户自己调整:请参阅 – http: //msdn.microsoft.com/en-us/library/dd464660(VS.85).aspx#dpi_virtualization

在.NET中移动符号位

我正在从单色位图中读取位。 我以相反的顺序将每16位存储在一个short中。 如果位图中的位为黑色,则存储1.如果为白色,则存储0。 例如:对于位图:bbbw bbbw bbbw wwww 我的简称是:0000 0111 0111 0111 我尝试这样做的第一种方式是: short m; // … Color c = bmp.GetPixel(j, i); if (cR == Color.Black) m |= short.MinValue; m >>= 1; // … 经过一次任务和class次后,我得到了预期的-32768(1000 0000 0000 0000)。 第二次我得到-16384(1100 0000 0000 0000)。 我改变了我的代码以使用ushort并将if行更改为s |= (ushort)Math.Pow(2, 15); 现在它的工作原理。 我的问题是:为什么标志位不会在.NET中发生变化? 有没有办法改变标志位?

C#中的最大数组维数如 …

我刚刚看到这个问题,并试图回答它。 但在回答时我认为在C#的情况下可能是什么答案? 我正在寻找一些MSDN文档或Java中的任何相关来源 C#中数组允许的最大尺寸是什么,如a[1][1][1][1]….[1] 。 我试图搜索SO,但无法找到。 我得到的最好的结果是“理论上,一个数组最多可以包含2,147,483,647个元素,因为它使用了一个int来进行索引。” 此外,我知道数组可以容纳的最大大小 System.Int32.MaxValue 如果这是重复,请告诉我,我会删除我的问题。

如果在运行时只知道类型参数,如何调用generics方法?

我有这个方法: public List SomeMethod( params ) where T : new() 所以我想把这个SomeMethod ,如果我知道这个类型就好了: SomeMethod(); 但如果我在运行时只有Class1 ,我就无法调用它? 那么如何用未知的T类型调用SomeMethod ? 我用reflection得到了Type。 我有Type类型,但SomeMethod SomeMethod不起作用。 更新7. May: 以下是我想要实现的示例代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; namespace ConsoleApplication63 { public class DummyClass { } public class Class1 { public string Name; } class AssemblyTypesReflection { static void Main(string[] […]

生成C#代码时,XSD工具将“Specified”附加到某些属性/字段

我对XSD生成器有一种奇怪的行为我无法解释。 我有一个像这样的XSD: Some Doc … … … … 它源自CoreObject: … 这只是XSD的一小部分,有很多更复杂的类型。 因此,当我生成类似于此的类时,我得到一个生成的类,它有两个属性(除了我期望的5): public bool MinDuration_100msSpecified 和 public bool StageOnDemandSpecified 所以对于“原始”属性,附加了“Specified”,类型现在是bool。 任何人都可以解释为什么会这样吗?

entity framework – 重用复杂类型

我在Code First Entity框架中有一个实体,目前看起来像这样: public class Entity { // snip … public string OriginalDepartment { get; set; } public string OriginalQueue { get; set; } public string CurrentDepartment { get; set; } public string CurrentQueue { get; set; } } 我想为这些类型创建复杂类型,如下所示: public class Location { public string Department { get; set; } public string Queue { […]

使用ConfigureAwait进行C#async / await链接(false)

基于众多书籍和博客,包括这里的优秀书籍,很明显当一个人写一个暴露助手异步方法的DLL库,即包装器方法时,通常认为内部完成实际异步方法的I / O任务的最佳实践在这样的线程池线程上(为了简洁起见,下面显示了伪代码,我以HttpClient为例) public Async Task MyMethodAsync(..) { … var httpClient = new HttpClient(..); var response = await httpClient.PostAsJsonAsync(..).ConfigureAwait(false); … return response; } 这里的关键是使用ConfigureAwait(false)以便在线程池线程上而不是在原始线程上下文上发生IO任务完成,从而可能防止死锁。 我的问题是从来电者的角度来看。 我对调用者和上面的方法调用之间存在多层方法调用的情况特别感兴趣,如下例所示。 CallerA -> Method1Async -> Method2Async -> finally the above MyMethodAsync 仅对最终方法使用ConfigureAwait(false)是否足够,还是应该确保Method1Async和Method2Async还在内部使用ConfigureAwait(false)调用其异步方法? 将它包含在所有这些中间方法中似乎很愚蠢,特别是如果Method1Async和Method2Async只是最终调用MyMethodAsync重载。 有任何想法,请指教! 更新了示例所以如果我有一个包含以下私有异步方法的库, private async Task MyPrivateMethodAsync(MyClass myClass) { … return await SomeObject.ReadAsStringAsync().ConfigureAwait(false); } 我应该确保以下公共重载方法还包括ConfigureAwait(false),如下所示? public async Task […]

WCF服务默认是无状态的吗?

我有一个简单的WCF服务,允许客户端/消费者应用程序通过提供用户名和密码登录。 如果用户名和密码都正确,则WCF服务为客户端提供GUID。 然后将GUID和用户名存储为WCF服务中的键/值对。 从此处开始,客户端将每个请求的GUID作为识别手段发送。 由于我将键/值对存储在Dictionary / Hashmap中,因此只有在WCF服务有状态时,此方法才有效。 问题是,它们是默认的有状态还是我必须做些什么才能使它们以这种方式运行?

entity framework核心:与同一实体的多对多关系

我试图与同一个实体映射多对多关系。 User实体具有用于Contacts的IList数据字段,用于存储用户的联系人/朋友信息: public class User : DomainModel { public virtual IList Contacts { get; protected set; } //irrelevant code omitted } 当我尝试使用流畅的API来映射这么多对多的关系时,它给我带来了一些麻烦。 显然,当我在user.Contacts属性上使用HasMany()时,它没有WithMany()方法来调用next。 Visual Studio中的intellisense仅显示WithOne() ,但不显示WithMany() 。 modelBuilder.Entity().HasMany(u => u.Contacts).WithMany() // gives compile time error: CS1061 ‘CollectionNavigationBuilder’ does not contain a definition for ‘WithMany’ and no extension method ‘WithMany’ accepting a first argument of type […]