Articles of c + +

gcc编译.c与.s文件 – .bss混淆(bug?)

在IA32体系结构的Ubuntu 12.04下使用gcc 4.6.3时遇到了一个问题,那就是使用存储在.bss段上的汇编文件编译C文件,同时使用.comm和.lcomm指令。 在.comm和.lcomm缓冲区之间,汇编文件foo.s使用接近最大的空间让我在这个分区中分配(foo计算长整数的总分解)。 用一个汇编文件bar.s来处理I / O等等,所有东西都编译和链接正常(和快速),并且工作正常。 当我使用C文件bar.c处理I / O时,gcc不会终止 – 至less不会在5分钟内完成。 .bss请求接近我的小型笔记本内存,但由于.bss段没有得到编译时初始化,并与bar.s一起工作,我不明白为什么会发生这种情况。 当我减小在foo.s中请求的.bss大小时,gcc编译并链接正常,并且所有的东西都按照它应该执行的那样执行。 此外,正如所料,在每种情况下使用创build的可执行文件的文件大小 gcc bar.c foo.s -Wall 不依赖于.bss请求的大小 (我编译的大小都比原来的小,大小不一)。 在所有情况下,可执行文件都是非常小的(可能是10k),实际上它的大小是相同的,但显然,原始文件不能成功编译并挂起。 这是海湾合作委员会的错误? 有没有一个命令行选项来防止这种情况发生? 或者是怎么回事? 编辑:每个评论,这里是与.bss段分配的部分: # Sieve of Eratosthenes # Create list of prime numbers smaller than n # # Note: – no input error (range) check # – n <= 500,000,000 (could be […]

如何在两个进程之间共享链表?

我有两个进程,我想分享他们之间的链接列表。 其中一个进程只是读取列表,而其他进程将修改列表(添加/删除条目)。 你能告诉我如何实现它? 让我给它添加更多的细节语言是C和平台是Linux。 似乎共享内存是一种方法,但我不知道如何实现它。 如果有人能告诉我实现它的方法,那么对我来说将是非常有帮助的。 我有一个想法,如下所述:我可以做这样的事情,我创build节点的大小的共享内存的一段。 然后,我只是处理malloc?我的意思是我将创buildshmget(键,SHMSZ,IPC_CREAT | 0666)的帮助下,SHMSZ将是结构节点的大小的共享内存。 所以我只在两个进程之间共享列表头。 列表中的第一个条目将具有除链接条目之外的所有值,这些链接条目将指向列表中的下一个条目,并且该条目是在malloc的帮助下创build的,因为在我的应用程序中,因为其他进程将只读,而一个进程将要添加/删除列表中的条目。 我收到了一个回复,告诉我我不能使用malloc。 我不知道为什么我不能使用malloc。 你能告诉我为什么我不能使用malloc吗? 下面是我的代码为上述目的,我一直在尝试,但得到分段错误。 struct node { int val; struct node* next; }; void append(struct node *q,int val); main() { key_t key = 5678; int shmid; struct node *head; if ((shmid = shmget(key, sizeof(struct node), IPC_CREAT | 0666)) < 0) { perror("shmget"); exit(1); […]

在捕获鼠标的同时捕获键盘事件,但窗口未聚焦(Win32)

我正在实现可以启动拖动事件的自定义控件。 当用户通过处理WM_LBUTTONDOWN并调用SetCapture()按下鼠标左键时,我开始拖动。 这将导致所有的鼠标事件,甚至是我的控制客户区域以外的鼠标事件都被发送到它,完全按照我的意愿。 我也想能够捕获按键,所以如果用户按下ESC键( VK_ESCAPE ),我可以取消拖动。 由于我的控件没有键盘焦点(我不希望它从拥有它的控件中窃取焦点),所以我不能听WM_KEYDOWN 。 由于其他原因太复杂解释,我也不希望使用DragDetect()函数。 当拖动正在进行时,我的控件如何findESC按键?

在android和windows之间同步文件的最佳方法

我有一个C#程序来执行在Windows上的清单。 现在我正在开发一个Android应用程序来执行这个清单。 现在我需要一个服务或其他东西来同步Windows程序和Android应用程序之间的清单。 也许我写了一个Web服务的应用程序,但我没有发现什么关于托pipe一个Java的Web服务的Android(本地networking)。 因为Android设备和PC总是在同一个networking中。 也许你的某个人有一个好主意。

需要FtpGetFile的例子,不工作

这是我目前的代码,但它什么都不做。 我也想在下载完成后打开do.bat #include <cstdlib> #include <iostream> #include <wininet.h> using namespace std; int main(int argc, char *argv[]) { HINTERNET hInternet = InternetOpen(NULL,INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0); // Initialization for WinInet Functions HINTERNET hFtpSession = InternetConnect(hInternet,"server",INTERNET_DEFAULT_FTP_PORT,"user","pass", INTERNET_SERVICE_FTP,INTERNET_FLAG_PASSIVE,0); // Starts a session in this case an FTP session FtpGetFile(hInternet,"do.bat","C:\\do.bat",FALSE,FILE_ATTRIBUTE_NORMAL,FTP_TRANSFER_TYPE_ASCII,0); InternetCloseHandle(hFtpSession); // Close hFtpSession InternetCloseHandle(hInternet); // Close hInternet system("PAUSE"); return EXIT_SUCCESS; }

挂钩OutputDebugStringA引发exception

我的目标是钩OutputDebugStringA,所以我可以阅读任何消息传递给它。 我不是想要挂钩任何其他的过程,而是现在的过程,只是为了学习如何挂钩。 我没有使用Detours,我宁愿不使用它们,因为我想了解如何在更深层次上进行挂钩。 我正在使用这个代码钩: void MakeJMP(BYTE *pAddress, DWORD dwJumpTo, DWORD dwLen); void myCallback(LPCSTR s); DWORD dwAddr = (DWORD) GetProcAddress(GetModuleHandleA("kernel32.dll"), "OutputDebugStringA"); // I cast it to byte and later to DWORD so it adds 5 DWORD dwRetAddr = ((BYTE)dwAddr) + 5; // +5 because I will override 5 bytes void __declspec(naked) My_OutputDebugStringA(){ __asm{ mov edi, edi […]

DirectX立即上下文在不同的线程从消息泵

如果我使用标志COINIT_APARTMENT_THREADED调用CoInitializeEx() ,是否明智地创build并在不同于调用PeekMessage()或GetMessage()线程上使用我的所有Direct3D对象? 这是否有性能问题?

C#如何在所有窗体中更改多种语言?

C#如何在所有窗体中更改多种语言? 我使用这种方法来改变其他语言,但它只改变当前窗体的forms。 我想为所有窗体select一种语言。 谢谢回答。 这是我的代码: private void ChineseTToolStripMenuItem_Click(object sender, EventArgs e) { ChangeLanguage("zh-tw"); ; } private void englishToolStripMenuItem_Click(object sender, EventArgs e) { ChangeLanguage("en"); } private void ChineseSToolStripMenuItem_Click(object sender, EventArgs e) { ChangeLanguage("zh-cn"); } private void ChangeLanguage(string lang) { foreach (Control c in this.Controls) { ComponentResourceManager resources = new ComponentResourceManager(typeof(FormMain)); resources.ApplyResources(c, c.Name, new CultureInfo(lang)); } }

如何在c ++中创build目录?

我正在尝试在c ++中创build多个目录。 这是我在做什么: string folder="SYSTEM/app"; string patchFolder="D:/cpp/prototype/New_delta/patch/" + folder; string mkdirCommand="mkdir " + patchFolder; system(mkdirCommand.c_str()); 但是它给的:命令的语法是不正确的。 到原型的path存在,它必须创build多个文件夹(New_delta,补丁等),如果不存在。 这有什么问题,以及如何纠正? 请。 谢谢。

.net窗口应用程序存储数据脱机,并存储到数据库,当有networking

我正在开发一个用于农业目的的Windows应用程序。 这个应用程序将被多个用户用来维护数据。 主要问题是在工作地点不会有networking连接。 但是,如果有任何select,他们可以在一天结束的时候同步。 我只想知道如何在本地导入和存储所有的数据,并在有networking时将数据更新到数据库。 我认为的选项是在运行此应用程序的每台机器上都具有SQL。 没有networking时将数据存储到本地数据库。 有networking时,有一个单独的button将本地数据导出到集中式数据库。 看起来这很复杂。 有没有更好更容易的select。 我更喜欢使用C#,Visual Studio。 谢谢。