﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-jack-wang-随笔分类-Win32</title><link>http://cppblog.com/jack-wang/category/20207.html</link><description>小王</description><language>zh-cn</language><lastBuildDate>Sat, 19 Nov 2022 03:35:22 GMT</lastBuildDate><pubDate>Sat, 19 Nov 2022 03:35:22 GMT</pubDate><ttl>60</ttl><item><title>error LNK2019: 无法解析的外部符号 CreateEnvironmentBlock</title><link>http://www.cppblog.com/jack-wang/archive/2022/06/22/229342.html</link><dc:creator>小王</dc:creator><author>小王</author><pubDate>Wed, 22 Jun 2022 07:16:00 GMT</pubDate><guid>http://www.cppblog.com/jack-wang/archive/2022/06/22/229342.html</guid><wfw:comment>http://www.cppblog.com/jack-wang/comments/229342.html</wfw:comment><comments>http://www.cppblog.com/jack-wang/archive/2022/06/22/229342.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jack-wang/comments/commentRss/229342.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jack-wang/services/trackbacks/229342.html</trackback:ping><description><![CDATA[<div>#pragma comment(lib,"Userenv.lib")<br /><br />O了！<br />去你爹个懒子！</div><img src ="http://www.cppblog.com/jack-wang/aggbug/229342.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jack-wang/" target="_blank">小王</a> 2022-06-22 15:16 <a href="http://www.cppblog.com/jack-wang/archive/2022/06/22/229342.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>无法将参数 从“const wchar_t ”转换为“LPWSTR”</title><link>http://www.cppblog.com/jack-wang/archive/2022/06/07/229331.html</link><dc:creator>小王</dc:creator><author>小王</author><pubDate>Tue, 07 Jun 2022 07:27:00 GMT</pubDate><guid>http://www.cppblog.com/jack-wang/archive/2022/06/07/229331.html</guid><wfw:comment>http://www.cppblog.com/jack-wang/comments/229331.html</wfw:comment><comments>http://www.cppblog.com/jack-wang/archive/2022/06/07/229331.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jack-wang/comments/commentRss/229331.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jack-wang/services/trackbacks/229331.html</trackback:ping><description><![CDATA[选中项目，&#8220;属性&#8221;-&gt;&#8220;C/C++&#8221;-&gt;&#8220;语言&#8221;-&gt;&#8220;符合模式&#8221;<br />是（ /permissive） 改为否（/permissive）<br /><br />再次编译<br />O了！<br />去你爹个懒子！<img src ="http://www.cppblog.com/jack-wang/aggbug/229331.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jack-wang/" target="_blank">小王</a> 2022-06-07 15:27 <a href="http://www.cppblog.com/jack-wang/archive/2022/06/07/229331.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows服务示例程序</title><link>http://www.cppblog.com/jack-wang/archive/2022/04/09/229276.html</link><dc:creator>小王</dc:creator><author>小王</author><pubDate>Fri, 08 Apr 2022 17:10:00 GMT</pubDate><guid>http://www.cppblog.com/jack-wang/archive/2022/04/09/229276.html</guid><wfw:comment>http://www.cppblog.com/jack-wang/comments/229276.html</wfw:comment><comments>http://www.cppblog.com/jack-wang/archive/2022/04/09/229276.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jack-wang/comments/commentRss/229276.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jack-wang/services/trackbacks/229276.html</trackback:ping><description><![CDATA[<div><div><div>1、源代码<br /><br />//服务器状态切换响应函数<br />void WINAPI ServiceHandler(DWORD fdwControl)</div><div>{</div><div>&nbsp; &nbsp; FILE* log = NULL;</div><div></div><div>&nbsp; &nbsp; switch (fdwControl)</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; case SERVICE_CONTROL_STOP:</div><div>&nbsp; &nbsp; case SERVICE_CONTROL_SHUTDOWN:</div><div>&nbsp; &nbsp; &nbsp; &nbsp; ServiceStatus.dwWin32ExitCode = 0;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; ServiceStatus.dwCurrentState = SERVICE_STOPPED;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; ServiceStatus.dwCheckPoint = 0;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; ServiceStatus.dwWaitHint = 0;</div><div></div><div>&nbsp; &nbsp; &nbsp; &nbsp; //add you quit code here</div><div>&nbsp; &nbsp; &nbsp; &nbsp; log = fopen("D:\\log.txt", "a+");</div><div>&nbsp; &nbsp; &nbsp; &nbsp; if (log)</div><div>&nbsp; &nbsp; &nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fprintf(log, "ServiceHandler: %s\n", "service stop");</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fclose(log);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; }</div><div>&nbsp; &nbsp; &nbsp; &nbsp; break;</div><div>&nbsp; &nbsp; default:</div><div>&nbsp; &nbsp; &nbsp; &nbsp; return;</div><div>&nbsp; &nbsp; };</div><div>&nbsp; &nbsp; if (!SetServiceStatus(hServiceStatusHandle, &amp;ServiceStatus))</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; DWORD nError = GetLastError();</div><div>&nbsp; &nbsp; }</div><div>}</div><br />//自定义工作线程回调函数，服务器启动前，调试附加进程-&gt;选择服务进程名称，并在此函数中加断点<br />void MyFunction()</div><div>{</div><div>&nbsp; &nbsp; FILE* fp = fopen("D:\\log.txt", "a+");</div><div>&nbsp; &nbsp; if (fp)</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; fputs("\n", fp);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; fputs("work thread start!", fp);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; fputs("\n", fp);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; fclose(fp);</div><div>&nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp;while(true)<br />&nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Sleep(1);<br />&nbsp; &nbsp; }</div>}<br /><br />//启动服务响应函数<br /><div>void WINAPI service_main(int argc, char** argv)</div><div>{</div><div>&nbsp; &nbsp; ServiceStatus.dwServiceType = SERVICE_WIN32;</div><div>&nbsp; &nbsp; ServiceStatus.dwCurrentState = SERVICE_START_PENDING;</div><div>&nbsp; &nbsp; ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_PAUSE_CONTINUE;</div><div>&nbsp; &nbsp; ServiceStatus.dwWin32ExitCode = 0;</div><div>&nbsp; &nbsp; ServiceStatus.dwServiceSpecificExitCode = 0;</div><div>&nbsp; &nbsp; ServiceStatus.dwCheckPoint = 0;</div><div>&nbsp; &nbsp; ServiceStatus.dwWaitHint = 0;</div><div>&nbsp; &nbsp; hServiceStatusHandle = RegisterServiceCtrlHandler(SERVICE_NAME, ServiceHandler);</div><div>&nbsp; &nbsp; if (hServiceStatusHandle == 0)</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; DWORD nError = GetLastError();</div><div>&nbsp; &nbsp; }</div><div></div><div>&nbsp; &nbsp; std::cout &lt;&lt; "my service start!" &lt;&lt; std::endl;</div><div>&nbsp; &nbsp; //add your init code here</div><div>&nbsp; &nbsp; FILE* log = fopen("D:\\log.txt", "a+");</div><div>&nbsp; &nbsp; for (int i = 0; i &lt; argc; ++i)</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; fprintf(log, "service_main: %s\n", argv[i]);</div><div>&nbsp; &nbsp; }</div><div>&nbsp; &nbsp; fclose(log);</div><div></div><div>&nbsp; &nbsp; //add your service thread here</div><div>&nbsp; &nbsp; std::thread wnd_thread(MyFunction);</div><div>&nbsp; &nbsp; wnd_thread.detach();</div><div></div><div>&nbsp; &nbsp; // Initialization complete - report running status&nbsp;</div><div>&nbsp; &nbsp; ServiceStatus.dwCurrentState = SERVICE_RUNNING;</div><div>&nbsp; &nbsp; ServiceStatus.dwCheckPoint = 0;</div><div>&nbsp; &nbsp; ServiceStatus.dwWaitHint = 9000;</div><div>&nbsp; &nbsp; if (!SetServiceStatus(hServiceStatusHandle, &amp;ServiceStatus))</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; DWORD nError = GetLastError();</div><div>&nbsp; &nbsp; }</div><div></div><div>}</div><br />int main(int argc, const char* argv[])</div><div>{</div><div>&nbsp; &nbsp; SERVICE_TABLE_ENTRY ServiceTable[2];</div><div></div><div>&nbsp; &nbsp; ServiceTable[0].lpServiceName = (LPSTR)SERVICE_NAME;</div><div>&nbsp; &nbsp; ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)service_main;</div><div></div><div>&nbsp; &nbsp; ServiceTable[1].lpServiceName = NULL;</div><div>&nbsp; &nbsp; ServiceTable[1].lpServiceProc = NULL;</div><div>&nbsp; &nbsp; // 启动服务的控制分派机线程</div><div>&nbsp; &nbsp; StartServiceCtrlDispatcher(ServiceTable);</div><div>&nbsp; &nbsp; return 0;</div><div>}<br /><br />2、创建服务<br />打开控制台，输入命令：<br /><div>sc create ServiceTest binPath= "编译生成的可执行文件绝对路径及文件名"<br />例如，上面示例程序编译输出路径及生成可执行文件名为：<br />D:\Test\ServiceTest\Debug\ServiceTest.exe<br />则，控制台输入命令为：<br /><div>sc create ServiceTest binPath= "D:\Test\ServiceTest\Debug\ServiceTest.exe"<br /><br />3、启动服务<br />（如果需要调试的话，此时附加调试进程ServiceTest，并在自定义工作线程回调函数中加断点）<br />控制台中输入命令：<br />sc start ServiceTest<br /><br />4、关闭服务<br />sc stop ServiceTest<br /><br />5、删除服务<br />sc delete ServiceTest<br /><br />O了！</div></div></div><img src ="http://www.cppblog.com/jack-wang/aggbug/229276.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jack-wang/" target="_blank">小王</a> 2022-04-09 01:10 <a href="http://www.cppblog.com/jack-wang/archive/2022/04/09/229276.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>重绘窗口</title><link>http://www.cppblog.com/jack-wang/archive/2012/11/18/195313.html</link><dc:creator>小王</dc:creator><author>小王</author><pubDate>Sat, 17 Nov 2012 18:01:00 GMT</pubDate><guid>http://www.cppblog.com/jack-wang/archive/2012/11/18/195313.html</guid><wfw:comment>http://www.cppblog.com/jack-wang/comments/195313.html</wfw:comment><comments>http://www.cppblog.com/jack-wang/archive/2012/11/18/195313.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jack-wang/comments/commentRss/195313.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jack-wang/services/trackbacks/195313.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;先获需要重绘的窗口句柄hWnd<br /><br />&nbsp;&nbsp; RECT rect;<br />&nbsp;&nbsp;&nbsp;::GetClientRect(hWnd, &amp;rect);<br />&nbsp;&nbsp;&nbsp;::InvalidateRect(hWnd, &amp;rect, TRUE);<br />&nbsp;&nbsp;&nbsp;::UpdateWindow(hWnd);<br /><br /><br />O了<img src ="http://www.cppblog.com/jack-wang/aggbug/195313.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jack-wang/" target="_blank">小王</a> 2012-11-18 02:01 <a href="http://www.cppblog.com/jack-wang/archive/2012/11/18/195313.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>