小编Mik*_*der的帖子

标准模板String类:string.fill()

我需要一种方法来创建一个n字符串.在这种情况下,ascii值为零.

我知道我可以通过调用构造函数来做到这一点:

string sTemp(125000,'a');

但是我想在许多地方重复使用sTemp并用不同的长度填充它.

我正在调用一个以字符串指针和长度作为参数的库,并用字节填充字符串.(我知道技术上字符串不是连续的,但是对于所有意图和目的而言,它很快就会成为标准).我不想使用矢量.

是否有一些聪明的方法在创建字符串后再次调用构造函数?

c++ string

6
推荐指数
1
解决办法
8551
查看次数

DuplicateHandle(),在第一个或第二个进程中使用?

Windows API DuplicateHandle() http://msdn.microsoft.com/en-us/library/ms724251(VS.85).aspx 需要复制 对象句柄以及原始进程和其他进程的句柄您想在其中使用重复的句柄。

我假设如果我有两个不相关的进程,只要我有所需的句柄,我就可以在任一进程中调用 DuplicateHandle() 吗?

我的问题是关于使用管道在两个进程之间进行通信以通过事件实现这一点。

在第一个过程中我 CreateEvent()。现在我想在第二个进程中使用 WaitForSingleObject() 。

如果我尝试在第一个进程中复制句柄,我需要首先通过管道将第二个进程句柄发送到第一个进程,复制句柄,然后将句柄发送到第二个进程?

或者,我可以首先将第一个进程句柄和事件句柄发送到第二个进程,然后在那里复制它。

我有什么理由应该选择一个而不是另一个吗?

为了添加一个皱纹,事件句柄实际上是从实际调用第一个进程(这是一个 CGI 应用程序)的父进程继承的。如果该事件句柄是使用 HANDLE_DO_NOT_DUPLICATE(类似的东西)创建的,那么我实际上可以使用 DuplicateHandle() 为第二个进程复制它吗?

回复:

好吧,我可以在第一个进程中创建一个新的 NAMED 事件,并按照建议在第二个进程中找到它,但我试图复制在第一个进程的父进程中创建的事件并将其转发给第二个进程。此事件不是命名事件,因此我需要使用 DuplicateHandle()。

我正在为 IPC 使用管道。我意识到 DuplicateHandle() 必须在第一个进程中调用,因为事件句柄在发送到第二个进程时脱离了上下文。

        hProcPseudo  = GetCurrentProcess() 

    //Then call either:
        lpRealHandle = OpenProcess( PROCESS_DUP_HANDLE, 0, hProcPseudo ) 
//This fails with GetLastError= 87 - The parameter is incorrect ???
// same thing with PROCESS_ALL_ACCESS ??


    //OR
        lRet = DuplicateHandle( hProcPseudo, hProcPseudo, hProcPseudo, lpRealHandle, DUPLICATE_SAME_ACCESS, 0, 0 )

    //then I can Duplicate my …
Run Code Online (Sandbox Code Playgroud)

c++ winapi ipc

5
推荐指数
1
解决办法
1万
查看次数

三次样条外推法

我有一个很好的三次样条代码,但它仅用于插值.我需要在未来稍微推断一下.这样做有谁知道一个很好的代码来源,而不是一个库?

这是我在基本(现在的ASM)中用于插值的代码.

graphing plot interpolation spline extrapolation

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

枚举Windows中的命名管道

我无法连接到命名管道(在这种情况下为快速cgi命名管道),根据MSDN,我应该使用CreateFile()或CallNamedPipe()(平面C API,同步-没有重叠的I / O) http:/ /msdn.microsoft.com/zh-CN/library/aa363858(VS.85).aspx

但是我得到了INVALID_HANDLE_VALUE,当我GetLastError()时它为零!

我也想知道是否可以用枚举所有命名管道某种调用,然后解析出我正在寻找的那个:“ \。\ pipe \ FastCGI \”

并没有人有这些评论的经验:http : //blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/225878

named-pipes

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

GetShortPathName不可预测的结果

GetShortPathName()在XP SP3上无法正常工作

http://msdn.microsoft.com/en-us/library/aa364989(VS.85).aspx

返回路径的输入字符串,如:

C:\Test\LongFolderNameToTestWith\BinarySearch.ini
Run Code Online (Sandbox Code Playgroud)

完全如发送?

然而:

C:\Documents and Settings\LocalService\NTUSER.DAT
Run Code Online (Sandbox Code Playgroud)

是否为路径设置了短名称,因此我知道我正在调用API.

然而:

C:\Documents and Settings\LocalService\BinarySearch.ini
Run Code Online (Sandbox Code Playgroud)

不会从文件名中创建一个简短的名称,但会为路径创建短名称!?

有人可以帮我理解这种行为,也许可以建议一个解决方法.

添加:

我需要能够将8.3路径/文件名传递给遗留应用程序

如何才能做到这一点?

补充:解决方案

经过多次阅读/实验后,似乎唯一可行的方法是使用自动化:

' ------------------------------------------------------------
' Library Name:      Microsoft Scripting Runtime 1.0
' Library File:      C:\WINDOWS\system32\scrrun.dll
' ------------------------------------------------------------
' Version Info:
' -------------
' Company Name:      Microsoft Corporation
' File Description:  Microsoft (R) Script Runtime
' File Version:      5.7.0.16599
' Internal Name:     scrrun.dll
' Legal Copyright:   Copyright (C) Microsoft Corp. 1996-2006, All Rights Reserved
' Original Filename: scrrun.dll
' Product Name: …
Run Code Online (Sandbox Code Playgroud)

c++ windows winapi

4
推荐指数
1
解决办法
6538
查看次数

VS2008 win32项目默认值 - 删除默认的预编译头文件

我已经通过各种方法试图找到一种方法让IDE让我创建一个没有预编译头文件的新win32pject.我已经阅读了这个论坛上的每个主题,其中包含"precpmpiled headers"字样,我得到的最接近的是:

预编译标题

使用2008专业版(不表达,虽然行为似乎相似)我去:

文件 - >新建 - >项目

这将打开New Project对话框,在其中我选择Visual C++ Win32 Project,输入名称并单击OK.

然后我得到了"Win32应用程序向导".将"应用程序类型"设置为"Windows应用程序"后,应用程序设置窗格将不允许我取消选中预编译的标头.复选框显示为灰色.如果我选择"控制台应用程序",我可以取消选中它,但我正在创建一个GUI应用程序.

当我单击完成时,我在xxx.cpp中获得了6码的代码,四个头文件和强制性的stdafx.cpp.

也许我可以删除和删除所有这些东西,然后进入属性并关闭PCH,但这对于我想写的许多小项目示例来说都是一个麻烦.

我只想要一个将编译为win32应用程序的空项目,那么如何将PCH默认值更改为NONE?

c++ precompiled-headers visual-studio-2008

4
推荐指数
1
解决办法
3924
查看次数

更新使用 WS_EX_TRANSPARENT 绘制的 C Win32 API STATIC 控件中的文本

我有一个带有一些静态标签和按钮的窗口。我将所有标签设置为透明背景,这样我就可以将背景设置为红色。在 CALLBACK 中,我处理 WM_CTLCOLORSTATIC 消息,使用 GetDlgCtrlID() 确定控件的 ID,然后:

SetBkMode((HDC)wParam, TRANSPARENT); // Make STATIC control Bkgd transparent
return (INT_PTR)(HBRUSH)GetStockObject(NULL_BRUSH);
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切都很好。绘制表格,背景为红色,标签文本绘制在顶部。

用户交互后,我需要更改文本,因此我发出 SetDlgItemText() 消息并绘制新文本。问题是旧文本没有被删除,新文本绘制在它的上面。

今天读了一些内容,问题似乎是控件父级(表单)负责绘制背景。这意味着当您更改标签文本时,控件将重绘新文本,但窗体不会自动重绘背景。

问题是如何强制表单重绘标签控件的矩形区域(最好不要子类化任何内容)?

添加:

我已经尝试过以下方法:

HWND hctrl;
hctrl = GetDlgItem(hwnd, ControlID);
RedrawWindow( hctrl, 0, 0, 
RDW_UPDATENOW || RDW_ALLCHILDREN || RDW_FRAME || RDW_INVALIDATE || RDW_ERASE || RDW_INTERNALPAINT ); // RDW_UPDATENOW 
Run Code Online (Sandbox Code Playgroud)

和:

我根本不处理 WM_PAINT 消息,只是:

case WM_CTLCOLORSTATIC:
 SetBkMode((HDC)wParam, TRANSPARENT); 
 return (INT_PTR)(HBRUSH)GetStockObject(NULL_BRUSH);




int Library::SetControlTxt( int ControlID, string sText  ) // Dialog Out
{ 
 int RetVal;

  RetVal = SetDlgItemText( hwnd, ControlID, sText.c_str() ); …
Run Code Online (Sandbox Code Playgroud)

c++ winapi

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

SELECT WHERE ......数以百计的条件

有一种优雅的方式来做到这一点:

SELECT Cols from MyTable WHERE 
zip = 90210 OR
zip = 23310 OR
zip = 74245 OR
zip = 77427 OR
zip = 18817 OR
zip = 94566 OR
zip = 34533 OR
zip = 96322 OR
zip = 34566 OR
zip = 52214 OR
zip = 73455 OR
zip = 52675 OR
zip = 54724 OR
zip = 98566 OR
zip = 92344 OR
zip = 90432 OR
zip = 91532 OR
...
Run Code Online (Sandbox Code Playgroud)

(这篇文章中的邮政编码是虚构的,与生活或死亡的实际邮政编码没有任何相似之处)

sql where

3
推荐指数
3
解决办法
1007
查看次数

自定义Windows文件夹图标

Skype在C:\ Program Files中为Skype文件夹提供了一个很好的自定义文件夹图标.

如何为特定窗口(XP和更高版本)文件夹注册自定义图标?

windows winapi

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

使用扩展SMTP(ESMTP)解析响应结束

要在发送"EHLO"时使用谷歌的示例响应:

250-mx.google.com at your service, [66.501.941.15]
250-SIZE 35651584
250-8BITMIME
250-AUTH LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250 PIPELINING
Run Code Online (Sandbox Code Playgroud)

十六进制:

32 35 30 2D 6D 78 2E 67 6F 6F 67 6C 65 2E 63 6F 6D 20 61 74 20 79 6F 75 72 20 73 65 72 76 69 63 65 2C 20 5B 39 32 2E 34 32 31 2E 35 36 35 2E 34 32 5D 0D 0A 32 35 30 2D 53 49 5A 45 20 33 35 36 …

c++ ssl email-client smtp

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

Windows API"国际象棋计时器"Sepmaphore事件

有没有像国际象棋计时器一样工作的电话机,意思是;

线程A完成其任务,循环回到顶部并调用信号量

这会触发线程2继续执行其代码,循环回到顶部并调用信号量

这会触发线程A ......

所以信号量既阻塞又信令.

我知道我可以使用两个事件和WaitForSingleObject,但我想知道是否有一个信号量专门做这个?

在这个主题上,一个事件的"昂贵"程度如何,在内存和CPU方面,WaitForSingleObject()的"代价"是多么"昂贵"?

c++ events semaphore

0
推荐指数
1
解决办法
203
查看次数

如何为Visual Studio 2008 C++生成自动属性(get,set)

读过这个关于在Visual Studio中生成getter和setter的问题,并尝试(稍微)所描述的技术,我已经惨遭失败,超越了写Getters and Setters的简单方法.

虽然我认识到封装的概念优势(在这种情况下是一个类的私有成员),但编写25个getter和setter却浪费了空间和时间.

为什么25?除了exageration因子(大约2.5)之外,我只是不知道将来我需要访问那个变量.我想我可以编写一个函数来返回所有这些函数并将其删除,但如果我添加更多成员(通常这样做),则必须在整个代码中更改函数.

我想建议的形式,这里的VS 2008:

string sName { get; set; }
Run Code Online (Sandbox Code Playgroud)

但它不会在C++中编译.这仅适用于.NET和C#吗?

有没有一些整洁的方法来在C++中模拟这个?

c++ oop visual-studio-2008

0
推荐指数
1
解决办法
1万
查看次数