草庐IT

C++:从内存映射文件读取/获取数据

我已经使用CreateFileMapping和MapViewOfFile使用C++VS2010在Window下映射文件。据我所知,从这个映射文件中获取/读取数据的唯一方法是使用MemCpy。但是,我希望可能有更快/更直接的方法。有吗?如果是,有人可以发布示例吗?谢谢! 最佳答案 您可以将内存块转换为数据结构,作为指针,structsomeStruct*data=(structsomeStruct*)memAddress;然后您可以将数据作为指针访问somefuction(data->var1,data->var2);或sum=dat

c - 句柄无效

尝试使用SetConsoleScreenBufferSize但失败并显示“句柄无效”。在最后一个错误。将发布所有代码,但这里有一些要点:使用它来调整缓冲区大小:intTGHandleResizeEvent(structTGHandle*tgHandle,INPUT_RECORDrecord){if(record.EventType==WINDOW_BUFFER_SIZE_EVENT){WINDOW_BUFFER_SIZE_RECORDsize=record.Event.WindowBufferSizeEvent;sizeTGDrawBuffer(&tgHandle->drawBuffe

c - Linux (gcc) 和 Windows (mingw32 gcc) 之间具有不同位域的结构大小

类似的问题,但特定于打包结构:WhywouldthesizeofapackedstructurebedifferentonLinuxandWindowswhenusinggcc?我正在为Linux和Windows构建一个共享库,它需要通过网络连接处理结构良好的数据。我在Linux上使用gcc4.8.2,并使用i686-pc-mingw32-gcc4.8.1为Windows目标交叉编译。我制作了这个小程序来演示这个问题(请注意GCC属性已被注释掉,保留它们以供引用):#include#include#includetypedefuint16_tword_t;typedefenum//__

python - 为什么某些值会使 struct.pack 和 struct.unpack 在 Windows 上失败?

当我使用struct.pack()将python整数转换为C结构(并将其写入文件)然后使用struct.unpack()进行反转我得到的转换通常是原始值……但并非总是如此。为什么?是否存在一些难以管理的值?例子:importstructfileName='C:/myFile.ext'formatCode='H'nBytes=2tries=range(8,12)forvalueintries:newFile=open(fileName,mode='w+')myBinary=struct.pack(formatCode,value)newFile.write(myBinary)newFil

c++ - BITMAPINFO 结构的 bmiColors 字段

BITMAPINFO结构有如下声明typedefstructtagBITMAPINFO{BITMAPINFOHEADERbmiHeader;RGBQUADbmiColors[1];}BITMAPINFO;为什么RGBQUAD数组是静态的?为什么不是指针? 最佳答案 声明一个可变大小结构是一个标准技巧。颜色表永远不会只有一个条目,对于单色位图它至少有2个,对于8bpp位图通常有256个,等等。由bmiHeader.biClrUsed成员指示。所以结构的实际大小取决于位图格式。由于C语言不允许声明这样的数据结构,因此这是最接近的匹配。创

c++ - 错误 C2011 : 'sockaddr' : 'struct' type redefinition. 请参阅 'sockaddr' 的声明

这个问题在这里已经有了答案:C++RedefinitionHeaderFiles(winsock2.h)(15个答案)关闭6年前。我使用VisualStudio2012并尝试获取静态库UDT开始工作。不幸的是,我无法编译将UDT库链接到自身的项目,我在WindowsSDKheader中收到159个关于类型或宏重新定义的奇怪错误。c:\programfiles\windowskits\8.0\include\shared\ws2def.h(96):warningC4005:'AF_IPX':macroredefinition2>c:\programfiles\windowskits\8.

c - c中的全局结构和多线程

谁能解释一下这段代码中的编译错误:#include"common.h"typedefstructnodeData{intprocid;unsignedshortlocalport;DWORDLIFETIME;DWORDHELLOTIMEOUT;DWORDMAXTIME;}nodeData;intlistenerThread(){if(!bindSocket(listenSocket,nodeData.localport)){closesocket(listenSocket);WSACleanup();exit(-1);}//morecodegoeshere}intmain(intarg

Windows 结构的 C++

我是Windows的C++开发新手..我正在尝试生成一个指向其他结构的结构...这怎么可能?structInitialNode{Node*nextNode;Node*lowerNode;}InitialNode;structNode{Node*nextNode;Node*lowerNode;intvalue;}Node;在InitialNode结构中突出显示了一个错误,其中Node*nextNode;和Node*lowerNode是..有什么想法吗?非常感谢:) 最佳答案 有几个错误:首先,我很确定您想要一个typedef。此外,您

c++ - 如何在结构数组中自动初始化最后一项?

我将一个数组传递给一个函数,并用一些值对其进行全局初始化。我在数组末尾使用空字符串来确定数组长度。现在,有没有什么方法可以自动初始化数组,使其末尾有额外的空项,这样我就没有机会从那里忘记它了?就像char[]的工作原理一样,它会向末尾的IIRC添加额外的null。这是我现在使用的代码:structtwostrings{strings1,s2;};twostringsoptions[]={{"text1","moretext1"},{"text2","moretext2"},{"text3","moretext3"},{""},//tellsthatthearrayendshere}in

c++ - 多播在 Windows Vista 上不工作

虽然我尝试在winXP中将某些内容多播到IP范围,但它工作正常,但当我在WinVIsta上运行相同的应用程序时,我无法进行多播。我是否需要为WinVitsa配置或添加发布者信息?编辑:structsockaddr_instaddr;memset(&staddr,0,sizeof(structsockaddr_in));staddr.sin_family=AF_INET;staddr.sin_port=htons(SSDP_PORT);//Usethefirstfreeportstaddr.sin_addr.s_addr=inet_addr(SSDP_MULTICAST_ADDRESS)