我的C++应用程序需要计算MD5哈希值.目前,它由OpenSSL完成,我想使用WinAPI - 以避免依赖外部库.
我写了这段代码:
HCRYPTPROV hCryptProv = NULL;
HCRYPTHASH hHash = NULL;
HCRYPTHASH hHexHash = NULL;
HASH HA1;
HASHHEX HA1HEX;
DWORD data = HASHLEN;
// Get a handle to a cryptography provider context.
if(!CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, 0))
{
goto err;
}
// Acquire a hash object handle.
if(!CryptCreateHash(hCryptProv, CALG_MD5, 0, 0, &hHash))
{
goto err;
}
CryptHashData(hHash, (const BYTE *)str, strlen(str), 0);
Run Code Online (Sandbox Code Playgroud)
现在,奇怪的是有时它运行良好,但在其他时候CryptAcquireContext返回NTE_BAD_KEYSET错误,根据MSDN:
密钥容器无法打开.此错误的常见原因是密钥容器不存在.要创建密钥容器,请使用CRYPT_NEWKEYSET标志调用CryptAcquireContext.此错误代码还可以指示拒绝访问现有密钥容器.密钥集创建者可以使用CryptSetProvParam授予对容器的访问权限.
大段引用
现在我的问题是:
如果有人给我很好的建议,我会很感激.
谢谢.
看起来TFS每次构建仅支持一个存储库。一旦我需要使用一些单独存储的第三方库,这对我来说还不够。
我可以为此使用GIT子模块,但是在这种情况下,构建将不会与提交和工作项相关联,因为它会忽略来自子模块的提交。此外,子模块中的更改不会触发构建。
是否可以使用插件,扩展名或类似的东西定义具有多个存储库的构建?
我有一个带有信号成员的类,用boost :: function封装.
是否可以使用此API添加另一个信号作为处理程序?
class Foo
{
public:
VOID AddHandler(boost::function<VOID()> handler)
{
m_signal.connect(handler);
}
private:
boost::signal<VOID()> m_signal;
};
boost::signal<VOID()> signal;
VOID SignalCaller()
{
signal();
}
int main( )
{
Foo foo;
//foo.AddHandler(signal); // I want to
foo.AddHandler(&SignalCaller); // I have to
}
Run Code Online (Sandbox Code Playgroud) > case WM_PAINT:
{
> hdc = BeginPaint(hWnd, &ps);
> // TODO: Add any drawing code here...
> RECT rt;
> GetClientRect(hWnd, &rt);
> HDC myHdc = CreateCompatibleDC(hdc);
>
> DrawText(myHdc, szHello, strlen(szHello), &rt, DT_CENTER);
> BitBlt(hdc,0,0,rt.right-rt.left,rt.bottom-rt.top,myHdc,0,0,SRCCOPY);
>
> EndPaint(hWnd, &ps);
}
>
> break;
Run Code Online (Sandbox Code Playgroud)
为什么文字无法在窗口显示?