jjzjj

c++ - DWORD 中的包装值

如何将两个unsignedshort(WORD)值打包成一个unsignedlong(DWORD)值?我知道如何使用HIWORD和LOWORD宏来获取它们,但是是否有一种...某种反向宏用于将它们存储到DWORD很快?我正在使用MicrosoftVisualStudio2012IDE使用C++进行编程。 最佳答案 MAKELONG接受两个WORD并将它们组合成一个DWORD:DWORDMAKELONG(WORDwLow,WORDwHigh);不知道为什么它不叫MAKEDWORD... 关

windows - 64 位 Windows 8.1 和 Qt 上的 MIDI 应用程序 - 指针大小问题

我正在尝试开发一个C++Windows应用程序来处理来自某些MIDI设备的MIDI信息。我强制使用的操作系统是Windows8.164位。开发环境为Qt。在阅读了大量网页后,我发现Windows有一组低级函数来处理MIDI数据,允许将WindowsMIDI驱动程序与任何应用程序连接。这些功能在此处描述http://msdn.microsoft.com/en-us/library/windows/desktop/dd757277(v=vs.85).aspx到目前为止,我编写的软件工作正常,我能够在我的应用程序中处理传入的MIDI短消息。尽管如此,当涉及到将一些缓冲区从应用程序传递到驱动程

c - C中的DWORD和HANDLE类型有什么区别?

我在C中有一个返回类型为DWORD的线程,但它随后由HANDLE类型指针处理。这两种类型有什么区别?我专门为ANSIC问这个问题。没错,DWORD是uint类型,HANDLE是PVOID,C允许直接强制转换DWORD到HANDLE。但是这些类型有什么不同吗?或者我可以简单地说它们是一样的吗?这是一个在讨论中被问到的问题。我想知道正确答案是什么。 最佳答案 Win32:DWORD32位无符号长型HANDLEvoid*(32位指针)Win64DWORD32位无符号长型HANDLEvoid*(64位指针)不要只是假设你可以将一个转换为另一

c++ - 通过命名管道发送 DWORD

我试图通过命名管道发送一个DWORD数组,但我一直在试图弄清楚如何发送单个DWORD。这是我到目前为止所得到的://CreateapipetosenddataHANDLEpipe=CreateNamedPipe(L"\\\\.\\pipe\\my_pipe",PIPE_ACCESS_OUTBOUND,PIPE_TYPE_BYTE,1,0,0,0,NULL);/*Waitingfortheothersidetoconnectandsomeerrorhandlingcutout*///HereItrytosendtheDWORDDWORDmsg=0xDEADBEEF;DWORDnumByt

c# - 检索 JIT 输出

我有兴趣查看C#程序(不是CLR字节码指令)的实际x86程序集输出。有什么好的方法吗? 最佳答案 在VisualStudio中调试应用程序时,您可以右键单击已停止(使用断点)的代码,然后单击“转到反汇编”。您可以通过native指令进行调试。至于使用磁盘上的*.exe文件,也许你可以使用NGen生成native输出然后反汇编它(虽然我从未尝试过,所以我不能保证它会起作用)。以下是用C#编写的简单算术运算的一些示例操作码:intx=5;movdwordptr[ebp-40h],5inty=6;movdwordptr[ebp-44h],

c# - C# 优化器性能差?

我刚刚编写了一个小示例来检查C#优化器在索引器情况下的行为。这个例子很简单——我只是将一个数组包装在一个类中并尝试填充它的值:一次是直接填充,一次是通过索引器(它在内部访问数据的方式与直接解决方案完全相同)。publicclassArrayWrapper{publicArrayWrapper(intnewWidth,intnewHeight){width=newWidth;height=newHeight;data=newint[width*height];}publicintthis[intx,inty]{get{returndata[y*width+x];}set{data[y*w

c# - 分配引用类型时 c# 中的奇怪 stackoverflow

在进行一些花哨的代码生成时,我遇到了一个我不理解的堆栈溢出。我的代码基本上是这样的:staticTuple[]DoWork(){//[callsomemethods]Tuple[]tmp=newTuple[100];tmp[0]=newTuple("blah1",0);tmp[1]=newTuple("blah2",1);tmp[2]=newTuple("blah3",2);//...tmp[99]=newTuple("blah99",99);returntmp;}如果您使用像这里(100)这样的小数字,则一切正常。如果数字很大,就会发生奇怪的事情。在我的例子中,我尝试发出大约10K行

c# - 为什么设置字段比获取字段慢很多倍?

我已经知道设置一个字段比设置一个局部变量慢得多,但似乎用一个局部变量设置一个字段比用一个字段设置一个局部变量慢得多。为什么是这样?在任何一种情况下,都会使用该字段的地址。publicclassTest{publicintA=0;publicintB=4;publicvoidMethod1()//Setlocalwithfield{inta=A;for(inti=0;i10e+6次迭代的基准测试结果为:Method1:28.1321msMethod2:162.4528ms 最佳答案 在我的机器上运行它,我得到类似的时间差异,但是查看1

c# - 为什么 C#(相当慢)和 Win32/C 之间的性能差异?

我们正在寻求将性能关键应用程序迁移到.Net,发现c#版本比Win32/C慢30%到100%,具体取决于处理器(移动T7200处理器上的差异更明显)。我有一个非常简单的代码示例来演示这一点。为简洁起见,我将只展示C版本——c#是直接翻译:#include"stdafx.h"#include"Windows.h"intarray1[100000];intarray2[100000];intTest();intmain(intargc,char*argv[]){intres=Test();return0;}intTest(){intcalc,i,k;calc=0;for(i=0;i如果我们

PHP 字节 2 双字

我有一个数组:$arr[0]=95$arr[1]=8$arr[2]=0$arr[3]=0那是字节。我需要一个DWORD。我试过了:$dword=$arr[0]+$arr[1]*265+$arr[2]*265*265+$arr[3]*265*265*265;这是对的还是我做错了? 最佳答案 尝试:$dword=(($arr[3]&0xFF)也可以按照您的方式进行一些更正:$dword=$arr[0]+$arr[1]*0x100+$arr[2]*0x10000+$arr[3]*0x1000000;或者使用打包/解包:$dword=arr