⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000000.htm

📁 水木清华关于C++Builder程序的代码
💻 HTM
📖 第 1 页 / 共 2 页
字号:
thread&nbsp;with&nbsp;CreateThread()&nbsp;and&nbsp;my&nbsp;exceptionis&nbsp;never&nbsp;caught.&nbsp;<BR>&nbsp;<BR>Answer:&nbsp;<BR>Use&nbsp;_beginthread().&nbsp;&nbsp;The&nbsp;function&nbsp;CreateThread&nbsp;does&nbsp;not&nbsp;&nbsp;<BR>initialize&nbsp;the&nbsp;RTL,&nbsp;which&nbsp;the&nbsp;exceptions&nbsp;depend&nbsp;on.&nbsp;Rumor&nbsp;has&nbsp;it&nbsp;&nbsp;<BR>that&nbsp;MS&nbsp;may&nbsp;initialize&nbsp;some&nbsp;RTL&nbsp;stuff&nbsp;in&nbsp;there&nbsp;DLL's.&nbsp;So&nbsp;,&nbsp;<BR>CreateThread()&nbsp;may&nbsp;work&nbsp;for&nbsp;them,&nbsp;but&nbsp;MS&nbsp;say's&nbsp;to&nbsp;use&nbsp;&nbsp;<BR>_beginthread()if&nbsp;you&nbsp;are&nbsp;using&nbsp;any&nbsp;&quot;...C&nbsp;runtime&nbsp;functions...&quot;&nbsp;&nbsp;<BR>(mentioned&nbsp;at&nbsp;the&nbsp;bottom&nbsp;of&nbsp;the&nbsp;Help&nbsp;file&nbsp;for&nbsp;CreateThread()).&nbsp;&nbsp;<BR>Thus,&nbsp;_beginthread&nbsp;IS&nbsp;the&nbsp;recommended&nbsp;function&nbsp;to&nbsp;use&nbsp;and&nbsp;we&nbsp;<BR>have&nbsp;not&nbsp;broken&nbsp;or&nbsp;violated&nbsp;anything.&nbsp;Not&nbsp;a&nbsp;bug&nbsp;!!!!&nbsp;<BR>&nbsp;<BR>10、Netscape&nbsp;Plug-ins&nbsp;SDK&nbsp;<BR>&nbsp;<BR>Question:&nbsp;<BR>Has&nbsp;any&nbsp;body&nbsp;been&nbsp;able&nbsp;to&nbsp;compile&nbsp;a&nbsp;DLL&nbsp;using&nbsp;the&nbsp;<BR>Netscape&nbsp;Plug-in&nbsp;SDK&nbsp;and&nbsp;Borland's&nbsp;development&nbsp;tools?&nbsp;<BR>&nbsp;<BR>One&nbsp;of&nbsp;the&nbsp;header&nbsp;files&nbsp;generates&nbsp;an&nbsp;error&nbsp;<BR>'CANNOT&nbsp;USE&nbsp;EXTERN&nbsp;&quot;C&quot;&nbsp;WITH&nbsp;TEMPLATES&nbsp;OR&nbsp;OVERLOADED&nbsp;OPERATORS'&nbsp;<BR>what&nbsp;is&nbsp;going&nbsp;on&nbsp;here?&nbsp;<BR>&nbsp;<BR>Answer:&nbsp;<BR>Certain&nbsp;C++&nbsp;constructs&nbsp;cannot&nbsp;be&nbsp;wrapped&nbsp;in&nbsp;extern&nbsp;C&nbsp;<BR>because&nbsp;the&nbsp;resulting&nbsp;names&nbsp;would&nbsp;not&nbsp;be&nbsp;meaningful.&nbsp;<BR>&nbsp;<BR>The&nbsp;extern&nbsp;&quot;C&quot;&nbsp;wrapper&nbsp;should&nbsp;only&nbsp;be&nbsp;used&nbsp;around&nbsp;three&nbsp;functions&nbsp;<BR>in&nbsp;npwin.cpp.&nbsp;<BR>&nbsp;<BR>But&nbsp;first,&nbsp;ensure&nbsp;your&nbsp;.dll's&nbsp;name&nbsp;starts&nbsp;with&nbsp;np:&nbsp;&nbsp;<BR>e.g.&nbsp;npplugin.dll.&nbsp;<BR>&nbsp;<BR>Second,&nbsp;create&nbsp;an&nbsp;export&nbsp;section&nbsp;in&nbsp;you're&nbsp;.def&nbsp;file&nbsp;with&nbsp;three&nbsp;&nbsp;<BR>Netscape&nbsp;functions&nbsp;to&nbsp;set&nbsp;up&nbsp;entry&nbsp;points:&nbsp;<BR>e.g.&nbsp;<BR>&nbsp;<BR>EXPORTS&nbsp;<BR>NP_GetEntryPoints&nbsp;@1&nbsp;<BR>NP_Initialize&nbsp;@2&nbsp;<BR>NP_Shutdown&nbsp;@3&nbsp;<BR>&nbsp;<BR>Finally,&nbsp;you&nbsp;need&nbsp;to&nbsp;wrap&nbsp;these&nbsp;three&nbsp;functions&nbsp;in&nbsp;the&nbsp;npwin.cpp&nbsp;<BR>with&nbsp;extern&nbsp;&quot;C&quot;:&nbsp;<BR>e.g.&nbsp;<BR>&nbsp;<BR>extern&nbsp;&quot;C&quot;&nbsp;NPError&nbsp;WINAPI&nbsp;NP_EXPORT&nbsp;NP_GetEntryPoints(NPPluginFuncs*&nbsp;pFuncs)&nbsp;<BR>etc...&nbsp;<BR>&nbsp;<BR>A&nbsp;good&nbsp;reference&nbsp;that&nbsp;discusses&nbsp;how&nbsp;to&nbsp;non-MS&nbsp;compilers&nbsp;is&nbsp;&nbsp;<BR>&quot;Programming&nbsp;Netscape&nbsp;Plug-Ins&quot;&nbsp;by&nbsp;Zan&nbsp;Oliphant.&nbsp;<BR>ISBN&nbsp;1-57721-098-3,&nbsp;published&nbsp;by&nbsp;Sams-Net.&nbsp;<BR>&nbsp;<BR>11、Exception&nbsp;Handling&nbsp;and&nbsp;VCL&nbsp;<BR>&nbsp;<BR>Question:&nbsp;<BR>Is&nbsp;there&nbsp;a&nbsp;simple&nbsp;way&nbsp;to&nbsp;catch&nbsp;exceptions&nbsp;in&nbsp;the&nbsp;control's&nbsp;&nbsp;<BR>events?&nbsp;<BR>&nbsp;<BR>Answer:&nbsp;<BR>Create&nbsp;a&nbsp;method&nbsp;of&nbsp;the&nbsp;form&nbsp;to&nbsp;trap&nbsp;for&nbsp;exceptions.&nbsp;&nbsp;This&nbsp;method&nbsp;<BR>will&nbsp;be&nbsp;called&nbsp;on&nbsp;the&nbsp;OnException&nbsp;method&nbsp;of&nbsp;the&nbsp;application.&nbsp;&nbsp;In&nbsp;<BR>your&nbsp;method,&nbsp;check&nbsp;for&nbsp;the&nbsp;exception&nbsp;you're&nbsp;looking&nbsp;for,&nbsp;&nbsp;<BR>ie&nbsp;EDatabaseError.&nbsp;&nbsp;Check&nbsp;the&nbsp;on-line&nbsp;help&nbsp;for&nbsp;the&nbsp;OnException&nbsp;&nbsp;<BR>event.&nbsp;&nbsp;It&nbsp;has&nbsp;info&nbsp;on&nbsp;how&nbsp;to&nbsp;call&nbsp;your&nbsp;own&nbsp;method&nbsp;for&nbsp;the&nbsp;event.&nbsp;<BR>For&nbsp;example:&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;void&nbsp;__fastcall&nbsp;TForm1::MyException(TObject&nbsp;*Sender,&nbsp;Exception&nbsp;*E)&nbsp;<BR>&nbsp;&nbsp;&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Don't&nbsp;forget&nbsp;to&nbsp;do&nbsp;a&nbsp;forward&nbsp;declaration&nbsp;for&nbsp;this&nbsp;in&nbsp;the&nbsp;class&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;definition.&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(dynamic_cast&lt;EDatabaseError*&gt;&nbsp;(E))&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(0,&nbsp;E-&gt;Message.c_str(),&nbsp;&quot;Trapped&nbsp;Exception&quot;,&nbsp;MB_OK);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;This&nbsp;is&nbsp;not&nbsp;the&nbsp;error&nbsp;you&nbsp;are&nbsp;looking&nbsp;for,&nbsp;Raise&nbsp;the&nbsp;exception.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;...&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;void&nbsp;__fastcall&nbsp;TForm1::FormCreate(TObject&nbsp;*Sender)&nbsp;<BR>&nbsp;&nbsp;&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application-&gt;OnException&nbsp;=&nbsp;MyException;&nbsp;<BR>&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;<BR>12、Why&nbsp;can't&nbsp;I&nbsp;use&nbsp;a&nbsp;member&nbsp;function&nbsp;of&nbsp;an&nbsp;object&nbsp;to&nbsp;create&nbsp;a&nbsp;thread&nbsp;<BR>&nbsp;<BR>Question:&nbsp;<BR>I'm&nbsp;trying&nbsp;to&nbsp;spin&nbsp;a&nbsp;thread,&nbsp;and&nbsp;I&nbsp;want&nbsp;to&nbsp;use&nbsp;a&nbsp;member&nbsp;<BR>function&nbsp;as&nbsp;the&nbsp;thread&nbsp;procedure.&nbsp;But&nbsp;I&nbsp;can't&nbsp;get&nbsp;<BR>the&nbsp;compiler&nbsp;to&nbsp;accept&nbsp;it.&nbsp;Why&nbsp;not?&nbsp;&nbsp;<BR>&nbsp;<BR>Answer:&nbsp;<BR>C++&nbsp;does&nbsp;not&nbsp;allow&nbsp;this&nbsp;behavior.&nbsp;<BR>&nbsp;<BR>Class&nbsp;methods&nbsp;are&nbsp;stored&nbsp;in&nbsp;memory&nbsp;in&nbsp;exactly&nbsp;(1)&nbsp;location.&nbsp;<BR>The&nbsp;way&nbsp;that&nbsp;a&nbsp;class&nbsp;method&nbsp;accesses&nbsp;other&nbsp;members&nbsp;of&nbsp;a&nbsp;<BR>class&nbsp;is&nbsp;via&nbsp;a&nbsp;pointer&nbsp;which&nbsp;is&nbsp;silently&nbsp;passed&nbsp;as&nbsp;the&nbsp;<BR>first&nbsp;argument&nbsp;to&nbsp;the&nbsp;method;&nbsp;windows&nbsp;knows&nbsp;nothing&nbsp;about&nbsp;<BR>this&nbsp;pointer,&nbsp;and&nbsp;is&nbsp;unable&nbsp;to&nbsp;pass&nbsp;it.&nbsp;<BR>&nbsp;<BR>The&nbsp;compiler&nbsp;will&nbsp;not&nbsp;allow&nbsp;you&nbsp;to&nbsp;call&nbsp;a&nbsp;non-static&nbsp;member&nbsp;&nbsp;<BR>function&nbsp;without&nbsp;an&nbsp;object&nbsp;because&nbsp;it&nbsp;does&nbsp;not&nbsp;know&nbsp;what&nbsp;<BR>to&nbsp;store&nbsp;in&nbsp;the&nbsp;this&nbsp;pointer;&nbsp;if&nbsp;it&nbsp;did,&nbsp;you&nbsp;would&nbsp;still&nbsp;<BR>not&nbsp;be&nbsp;happy&nbsp;with&nbsp;the&nbsp;result,&nbsp;because&nbsp;windows&nbsp;would&nbsp;NOT&nbsp;<BR>pass&nbsp;a&nbsp;this&nbsp;pointer&nbsp;as&nbsp;the&nbsp;first&nbsp;argument.&nbsp;<BR>&nbsp;<BR>To&nbsp;get&nbsp;around&nbsp;this,&nbsp;you&nbsp;can:&nbsp;<BR>&nbsp;<BR>(a)&nbsp;use&nbsp;a&nbsp;static&nbsp;method.&nbsp;<BR>(b)&nbsp;have&nbsp;a&nbsp;global&nbsp;c-style&nbsp;function&nbsp;which&nbsp;calls&nbsp;the&nbsp;method&nbsp;<BR>of&nbsp;a&nbsp;particular&nbsp;object&nbsp;by&nbsp;invoking&nbsp;it&nbsp;explicitly,&nbsp;eg.&nbsp;&nbsp;<BR>&nbsp;<BR>int&nbsp;foo()&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;object.method()&nbsp;<BR>}&nbsp;<BR>&nbsp;<BR>and&nbsp;then&nbsp;pass&nbsp;that&nbsp;to&nbsp;the&nbsp;thread-invocation&nbsp;function.&nbsp;&nbsp;<BR>&nbsp;<BR>13、Errno,&nbsp;BC5.02,&nbsp;and&nbsp;C++Builder&nbsp;&nbsp;<BR>&nbsp;<BR>Question:&nbsp;<BR>I've&nbsp;created&nbsp;this&nbsp;static&nbsp;library&nbsp;in&nbsp;BC++&nbsp;5.0,&nbsp;<BR>and&nbsp;i'm&nbsp;trying&nbsp;to&nbsp;use&nbsp;it&nbsp;in&nbsp;C++Builder,&nbsp;but&nbsp;<BR>i'm&nbsp;getting&nbsp;linker&nbsp;errors&nbsp;regarding&nbsp;_errno.&nbsp;Why?&nbsp;<BR>Shouldn't&nbsp;this&nbsp;be&nbsp;the&nbsp;same&nbsp;in&nbsp;both&nbsp;products?&nbsp;&nbsp;<BR>&nbsp;<BR>Answer:&nbsp;<BR>At&nbsp;first&nbsp;glance,&nbsp;it&nbsp;seems&nbsp;like&nbsp;it&nbsp;should.&nbsp;But&nbsp;<BR>if&nbsp;you&nbsp;look&nbsp;at&nbsp;the&nbsp;header&nbsp;file,&nbsp;you&nbsp;will&nbsp;see&nbsp;<BR>that&nbsp;_errno&nbsp;is&nbsp;_different_&nbsp;depending&nbsp;on&nbsp;whether&nbsp;<BR>or&nbsp;not&nbsp;_MT&nbsp;is&nbsp;defined.&nbsp;This&nbsp;is&nbsp;because&nbsp;the&nbsp;default&nbsp;<BR>errno&nbsp;is&nbsp;not&nbsp;thread-safe,&nbsp;and&nbsp;the&nbsp;one&nbsp;provided&nbsp;<BR>when&nbsp;_MT&nbsp;(which&nbsp;determines&nbsp;whether&nbsp;the&nbsp;compiler&nbsp;<BR>should&nbsp;use&nbsp;the&nbsp;multi-threaded&nbsp;or&nbsp;non-multi-threaded&nbsp;<BR>versions&nbsp;of&nbsp;the&nbsp;RTL)&nbsp;is&nbsp;defined&nbsp;is.&nbsp;<BR>&nbsp;<BR>The&nbsp;defaults&nbsp;for&nbsp;this&nbsp;compiler&nbsp;define&nbsp;vary&nbsp;between&nbsp;<BR>BC++&nbsp;5.02&nbsp;and&nbsp;BC++Builder.&nbsp;Thus,&nbsp;you&nbsp;cannot&nbsp;link;&nbsp;<BR>the&nbsp;symbol&nbsp;is&nbsp;different.&nbsp;<BR>&nbsp;<BR>You&nbsp;need&nbsp;to&nbsp;rebuild&nbsp;your&nbsp;.lib&nbsp;in&nbsp;BC++&nbsp;5.02&nbsp;<BR>_with&nbsp;_MT&nbsp;defined._&nbsp;<BR>&nbsp;<BR>14、Fatal&nbsp;General&nbsp;error&nbsp;in&nbsp;.#nn&nbsp;files&nbsp;or&nbsp;assert&nbsp;failures&nbsp;from&nbsp;ilink&nbsp;&nbsp;<BR>&nbsp;<BR>Question:&nbsp;<BR>Problems&nbsp;at&nbsp;link&nbsp;time&nbsp;<BR>Linker&nbsp;Fatal&nbsp;General&nbsp;error&nbsp;in&nbsp;.#nn&nbsp;files&nbsp;or&nbsp;assert&nbsp;failures&nbsp;from&nbsp;ILINK&nbsp;<BR>&nbsp;<BR>Problem&nbsp;description:&nbsp;<BR>At&nbsp;link&nbsp;time&nbsp;<BR>Fatal&nbsp;General&nbsp;error&nbsp;in&nbsp;module&nbsp;..\lib\vcld.#02.&nbsp;Sometimes&nbsp;it&nbsp;is&nbsp;vcld.#00&nbsp;or&nbsp;<BR>vcld.#01.&nbsp;&nbsp;<BR>&nbsp;<BR>Using&nbsp;the&nbsp;incremental&nbsp;linker&nbsp;the&nbsp;error&nbsp;is&nbsp;<BR>Fatal:&nbsp;Assertion&nbsp;failed:&nbsp;recLen&nbsp;==&nbsp;0&nbsp;at&nbsp;&quot;IMPORT.CPP&quot;,&nbsp;line&nbsp;486&quot;&nbsp;<BR>&nbsp;<BR>Answer:&nbsp;<BR>There&nbsp;is&nbsp;a&nbsp;known&nbsp;problem&nbsp;that&nbsp;shows&nbsp;up&nbsp;when&nbsp;using&nbsp;typedefed&nbsp;instantiations&nbsp;<BR>of&nbsp;templates&nbsp;in&nbsp;headers&nbsp;with&nbsp;precompiled&nbsp;headers&nbsp;and&nbsp;debug&nbsp;info&nbsp;is&nbsp;turned&nbsp;&nbsp;<BR>on.&nbsp;&nbsp;The&nbsp;problem&nbsp;will&nbsp;show&nbsp;up&nbsp;as&nbsp;general&nbsp;failures&nbsp;in&nbsp;.#nn&nbsp;with&nbsp;the&nbsp;standard&nbsp;<BR>linker&nbsp;or&nbsp;asserts&nbsp;with&nbsp;the&nbsp;incremental&nbsp;linker.&nbsp;<BR>&nbsp;<BR>The&nbsp;workaround&nbsp;is&nbsp;to&nbsp;manage&nbsp;your&nbsp;precompiled&nbsp;headers&nbsp;with&nbsp;#pragma&nbsp;<BR>hdrstop&nbsp;being&nbsp;sure&nbsp;to&nbsp;exclude&nbsp;the&nbsp;header(s)&nbsp;with&nbsp;template&nbsp;typedefs&nbsp;<BR>from&nbsp;the&nbsp;pch.&nbsp;<BR>&nbsp;<BR>#include&nbsp;&lt;vcl\vcl.h&gt;&nbsp;<BR>#include&nbsp;&quot;mypch.h&quot;&nbsp;//&nbsp;headers&nbsp;that&nbsp;seldom&nbsp;change&nbsp;and&nbsp;no&nbsp;templates&nbsp;<BR>#pragma&nbsp;hdrstop&nbsp;<BR>#include&nbsp;&quot;mytemplates.h&quot;&nbsp;&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>Note&nbsp;that&nbsp;the&nbsp;problem&nbsp;is&nbsp;really&nbsp;with&nbsp;the&nbsp;external-type&nbsp;OBJ,&nbsp;those&nbsp;.#nn&nbsp;files&nbsp;<BR>(&nbsp;-He&nbsp;in&nbsp;the&nbsp;readme&nbsp;).&nbsp;So&nbsp;you&nbsp;could&nbsp;also&nbsp;just&nbsp;turn&nbsp;that&nbsp;switch&nbsp;off.&nbsp;&nbsp;<BR>Open&nbsp;the&nbsp;.MAK&nbsp;file&nbsp;and&nbsp;add&nbsp;-He-&nbsp;to&nbsp;the&nbsp;CFLAG1&nbsp;line.&nbsp;<BR>&nbsp;&nbsp;<BR>--&nbsp;<BR>&nbsp;<BR>※&nbsp;修改:·Zeemon&nbsp;於&nbsp;Dec&nbsp;&nbsp;3&nbsp;20:03:11&nbsp;修改本文·[FROM:&nbsp;sapphire.ncic.a]&nbsp;<BR>※&nbsp;来源:·BBS&nbsp;水木清华站&nbsp;bbs.net.tsinghua.edu.cn·[FROM:&nbsp;sapphire.ncic.a]&nbsp;<BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -