小编Rob*_*Rob的帖子

如何发现嵌入式资源的"路径"?

我将PNG存储为程序集中的嵌入式资源.在同一个程序集中,我有一些像这样的代码:

Bitmap image = new Bitmap(typeof(MyClass), "Resources.file.png");
Run Code Online (Sandbox Code Playgroud)

名为"file.png"的文件存储在"Resources"文件夹中(在Visual Studio中),并标记为嵌入式资源.

代码失败,异常说:

在MyNamespace.MyClass类中找不到资源MyNamespace.Resources.file.png

我有相同的代码(在不同的程序集中,加载不同的资源)工作.所以我知道这种技术很合理.我的问题是我最终花了很多时间试图弄清楚正确的路径是什么.如果我可以简单地查询(例如在调试器中)程序集以找到正确的路径,那将为我节省大量的麻烦.

.net c# resources

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

C#中的位字段

我有一个结构,我需要填充和写入磁盘(实际上几个).

一个例子是:

byte-6    
bit0 - original_or_copy  
bit1 - copyright  
bit2 - data_alignment_indicator  
bit3 - PES_priority  
bit4-bit5 - PES_scrambling control.  
bit6-bit7 - reserved  
Run Code Online (Sandbox Code Playgroud)

在CI中可能会执行以下操作:

struct PESHeader  {
    unsigned reserved:2;
    unsigned scrambling_control:2;
    unsigned priority:1;
    unsigned data_alignment_indicator:1;
    unsigned copyright:1;
    unsigned original_or_copy:1;
};
Run Code Online (Sandbox Code Playgroud)

有没有办法在C#中做到这一点,使我能够使用struct dereferencing点运算符访问位?

对于几个结构,我可以在访问器函数中进行包裹移位.

我有很多结构要以这种方式处理,所以我正在寻找一些更容易阅读和更快写的东西.

c# bit-fields

75
推荐指数
8
解决办法
9万
查看次数

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

如何区分.Net中的单击和双击?

我想覆盖OnMouseClick和OnMouseDoubleClick,并根据使用的单击样式执行不同的操作.

问题是OnMouseClick正在发生单击和双击,并且在OnMouseDoubleClick之前被调用.

我确信这一定是一个常见的要求,所以我想我错过了一些非常明显的东西.有人能填补我吗?

编辑添加:MouseEventArgs.Clicks计数没有帮助.如果是双击,则第一次单击将在OnMouseClick中单击一次,并使用MouseEventArgs.Clicks == 1.

编辑添加:对象是图像缩略图.单击即可打开和关闭选择以进行导出.双击应使缩略图全屏.选择和"激活"动作是正交的.这可能表明这两个行动存在潜在问题......

干杯,罗布

.net c# user-interface click

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

如何在WIX中引用用户的主目录

我正在为SDK创建一个安装程序,其中包含由最终用户编译的源代码.

我希望我的Wix安装程序默认将它放在用户的主目录中,但我找不到合适的属性名称.

wix

6
推荐指数
2
解决办法
3675
查看次数

sizeof(*this)给出错误的值

我有一个类,C.C有一个成员变量声明为:bool markerStart;

从C内部调用sizeof(*this)给出的值为0x216字节.

在C的其他地方,我做:markerStart = false;

而不是将markerStart设置为false,这个调用实际上是在内存中破坏下一个类的开始!

看一下反汇编的代码,我发现:

markerStart = false;
06FB6B7F mov            eax, dword ptr [this]
06FB6B78 mov            byte ptr [eax+218h], 0
Run Code Online (Sandbox Code Playgroud)

第二个移动指令是将此+ 0x218处的字节设置为零,但由于该类仅为0x216字节长,因此这会破坏内存!

在回复评论时,肯定是markerStart = false指令.我可以在反汇编视图和内存视图中观察它(并使用Windbg,使用数据断点).下一个类的第一个字节被设置为零,这会弄乱它的vftbl指针.

注意:获取markerStart的地址并从中减去它,产生0x211!

任何人都可以给我一个线索,从哪里开始寻求解决这个问题?

更新:感谢您的帮助.没有代码,你几乎不可能解决问题.我正在寻找的是关于从哪里开始寻找的提示.大多数人提供了很好的提示,谢谢!

我终于找到了问题.在这种情况下,已在一个类中设置了对齐,并且在关键代码块之后未正确重置.具有错误对齐的类恰好在C类声明之前被编译 - 因此这就是问题出现的地方.

c++ assembly sizeof

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