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

📄 00000000.htm

📁 水木清华关于C++Builder程序的代码
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<HTML><HEAD>  <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人:&nbsp;Zeemon&nbsp;(塞下秋),&nbsp;信区:&nbsp;Visual&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;C++&nbsp;Builder常见问题解答(3)&nbsp;<BR>发信站:&nbsp;BBS&nbsp;水木清华站&nbsp;(Wed&nbsp;Dec&nbsp;&nbsp;3&nbsp;19:58:47&nbsp;1997)&nbsp;<BR>&nbsp;<BR>第三部分&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C/C++&nbsp;Language&nbsp;Issues&nbsp;<BR>&nbsp;<BR>1、Sizeof&nbsp;template&nbsp;parameter&nbsp;&nbsp;<BR>&nbsp;<BR>Question:&nbsp;<BR>BC++&nbsp;5.02&nbsp;and&nbsp;C++Builder&nbsp;do&nbsp;not&nbsp;allow&nbsp;sizeof()&nbsp;to&nbsp;take&nbsp;<BR>a&nbsp;template&nbsp;parameter.&nbsp;How&nbsp;do&nbsp;I&nbsp;get&nbsp;around&nbsp;this?&nbsp;&nbsp;<BR>&nbsp;<BR>Answer:&nbsp;<BR>The&nbsp;behavior&nbsp;is&nbsp;a&nbsp;result&nbsp;of&nbsp;a&nbsp;bug&nbsp;in&nbsp;BC++&nbsp;5.02&nbsp;and&nbsp;C++Builder.&nbsp;<BR>Borland&nbsp;is&nbsp;aware&nbsp;of&nbsp;the&nbsp;bug.&nbsp;In&nbsp;the&nbsp;interim,&nbsp;the&nbsp;following&nbsp;hack&nbsp;<BR>will&nbsp;get&nbsp;around&nbsp;the&nbsp;problem:&nbsp;<BR>&nbsp;<BR>template&nbsp;&lt;class&nbsp;T&gt;&nbsp;class&nbsp;foo&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;hack&nbsp;{T&nbsp;t;&nbsp;};&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;enum&nbsp;_sz&nbsp;{SIZE&nbsp;=&nbsp;sizeof(t)&nbsp;};&nbsp;<BR>}&nbsp;&nbsp;<BR>&nbsp;<BR>2、Calling&nbsp;Pascal&nbsp;from&nbsp;C++Builder&nbsp;<BR>&nbsp;<BR>Question:&nbsp;<BR>How&nbsp;do&nbsp;I&nbsp;call&nbsp;Pascal&nbsp;routines&nbsp;and&nbsp;variables&nbsp;from&nbsp;C++&nbsp;modules?&nbsp;<BR>&nbsp;<BR>Answer:&nbsp;<BR>&nbsp;&nbsp;&nbsp;An&nbsp;easy&nbsp;way&nbsp;to&nbsp;find&nbsp;out&nbsp;is&nbsp;to&nbsp;let&nbsp;C++Builder&nbsp;do&nbsp;it&nbsp;for&nbsp;you.&nbsp;&nbsp;<BR>Put&nbsp;the&nbsp;Object&nbsp;Pascal&nbsp;declarations&nbsp;you&nbsp;need&nbsp;to&nbsp;translate&nbsp;in&nbsp;the&nbsp;&nbsp;<BR>interface&nbsp;section&nbsp;of&nbsp;an&nbsp;Object&nbsp;{ascal&nbsp;unit.&nbsp;&nbsp;Now&nbsp;use&nbsp;the&nbsp;command&nbsp;&nbsp;<BR>line&nbsp;compiler&nbsp;DCC32.EXE&nbsp;with&nbsp;the&nbsp;options&nbsp;j,&nbsp;p,&nbsp;h,&nbsp;n,&nbsp;and&nbsp;v.&nbsp;&nbsp;<BR>Below&nbsp;is&nbsp;an&nbsp;example&nbsp;of&nbsp;called&nbsp;DCC32&nbsp;to&nbsp;translate&nbsp;a&nbsp;file&nbsp;called&nbsp;<BR>MyUnit.pas.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCC32&nbsp;-jphnv&nbsp;&nbsp;MyUnit.pas&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>After&nbsp;the&nbsp;compliler&nbsp;finished&nbsp;you&nbsp;will&nbsp;have&nbsp;a&nbsp;header&nbsp;file&nbsp;call&nbsp;&nbsp;<BR>MyUnit.hpp,&nbsp;open&nbsp;it&nbsp;in&nbsp;an&nbsp;editor&nbsp;and&nbsp;will&nbsp;see&nbsp;the&nbsp;C++&nbsp;&nbsp;<BR>declarations.&nbsp;<BR>&nbsp;<BR>3、Converting&nbsp;AnsiString&nbsp;to&nbsp;numeric&nbsp;variables&nbsp;<BR>&nbsp;<BR>Question:&nbsp;<BR>&nbsp;&nbsp;&nbsp;How&nbsp;do&nbsp;you&nbsp;convert&nbsp;AnsiStrings&nbsp;to&nbsp;and&nbsp;from&nbsp;numeric&nbsp;values&nbsp;in&nbsp;&nbsp;<BR>C++Builder?&nbsp;<BR>&nbsp;<BR>Answer:&nbsp;<BR>&nbsp;&nbsp;&nbsp;Use&nbsp;the&nbsp;built-in&nbsp;functions&nbsp;StrToInst()&nbsp;and&nbsp;StrToFloat&nbsp;convert&nbsp;&nbsp;<BR>to&nbsp;numeric&nbsp;values&nbsp;and&nbsp;IntToStr()&nbsp;and&nbsp;StrToFloat()&nbsp;for&nbsp;the&nbsp;&nbsp;<BR>reverse&nbsp;process.&nbsp;<BR>&nbsp;<BR>&nbsp;int&nbsp;intValue&nbsp;=&nbsp;StrToInt(Edit1-&gt;Text);&nbsp;//String&nbsp;to&nbsp;Integer&nbsp;double&nbsp;<BR>&nbsp;double&nbsp;doubleValue&nbsp;=&nbsp;StrToFloat(Edit1-&gt;Text);//String&nbsp;to&nbsp;Double&nbsp;<BR>&nbsp;<BR>&nbsp;Edit1-&gt;Text&nbsp;=&nbsp;IntToStr(IntValue);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Integer&nbsp;to&nbsp;String&nbsp;<BR>&nbsp;Edit1-&gt;Text&nbsp;=&nbsp;FloatToStr(doubleValue);&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Double&nbsp;to&nbsp;String&nbsp;<BR>&nbsp;<BR>4、C++&nbsp;and&nbsp;Pascal&nbsp;<BR>&nbsp;<BR>Question:&nbsp;<BR>I&nbsp;am&nbsp;C++&nbsp;programmer&nbsp;and&nbsp;not&nbsp;familiar&nbsp;with&nbsp;pascal.&nbsp;Can&nbsp;you&nbsp;&nbsp;<BR>give&nbsp;me&nbsp;a&nbsp;few&nbsp;pointers&nbsp;that&nbsp;will&nbsp;help?&nbsp;<BR>&nbsp;<BR>Answer:&nbsp;<BR>Here&nbsp;are&nbsp;some&nbsp;pointers:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Function&nbsp;(&nbsp;procedure&nbsp;)&nbsp;calls&nbsp;don't&nbsp;require&nbsp;parenthesis.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;When&nbsp;you&nbsp;see&nbsp;'.'&nbsp;in&nbsp;pascal,&nbsp;you&nbsp;probably&nbsp;need&nbsp;the&nbsp;'-&gt;'&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;C/C++.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Form2.Show;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*&nbsp;Opascal&nbsp;*)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Form2-&gt;Show();&nbsp;&nbsp;//&nbsp;C++&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Don't&nbsp;forget&nbsp;assignment&nbsp;operator&nbsp;is&nbsp;a&nbsp;colon&nbsp;equals&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;combination&nbsp;':='.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Create&nbsp;and&nbsp;CreateNew&nbsp;are&nbsp;Object&nbsp;Pascal's&nbsp;constructors.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;The&nbsp;inherited&nbsp;statement&nbsp;is&nbsp;used&nbsp;to&nbsp;tell&nbsp;the&nbsp;compiler&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;not&nbsp;to&nbsp;call&nbsp;the&nbsp;function&nbsp;named&nbsp;in&nbsp;the&nbsp;current&nbsp;class,&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;but&nbsp;to&nbsp;use&nbsp;the&nbsp;one&nbsp;in&nbsp;the&nbsp;next&nbsp;class&nbsp;higher&nbsp;in&nbsp;the&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hierarchy.&nbsp;If&nbsp;not,&nbsp;there&nbsp;continue&nbsp;searching&nbsp;up&nbsp;the&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hierarchy.&nbsp;This&nbsp;is&nbsp;the&nbsp;same&nbsp;as&nbsp;the&nbsp;super&nbsp;keyword&nbsp;in&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Java&nbsp;or&nbsp;Smalltalk.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Bar&nbsp;=&nbsp;class(Foo)&nbsp;in&nbsp;Opascal&nbsp;says&nbsp;a&nbsp;variable&nbsp;of&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type&nbsp;class&nbsp;Bar&nbsp;inheirits&nbsp;compatibliliy&nbsp;with&nbsp;class&nbsp;Foo.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Shape&nbsp;=&nbsp;class&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.&nbsp;.&nbsp;.&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rectangle&nbsp;=&nbsp;class(Shape)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.&nbsp;.&nbsp;.&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Square&nbsp;=&nbsp;class(Rectangle)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.&nbsp;.&nbsp;.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Circle&nbsp;=&nbsp;class(Shape)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.&nbsp;.&nbsp;.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;In&nbsp;example&nbsp;above&nbsp;a&nbsp;value&nbsp;of&nbsp;Rectangle&nbsp;can&nbsp;be&nbsp;assigned&nbsp;to&nbsp;&nbsp;<BR>variables&nbsp;of&nbsp;type&nbsp;Rectangle,&nbsp;Shape,&nbsp;or&nbsp;TObject&nbsp;(&nbsp;base&nbsp;of&nbsp;all&nbsp;&nbsp;<BR>VCL&nbsp;classes.)&nbsp;At&nbsp;runtime&nbsp;a&nbsp;variable&nbsp;of&nbsp;type&nbsp;Shape&nbsp;can&nbsp;reference&nbsp;&nbsp;<BR>an&nbsp;instance&nbsp;of&nbsp;Shape,&nbsp;Rectangle,&nbsp;Square,&nbsp;or&nbsp;Circle&nbsp;or&nbsp;any&nbsp;other&nbsp;&nbsp;<BR>instance&nbsp;or&nbsp;a&nbsp;class&nbsp;derived&nbsp;from&nbsp;Shape.&nbsp;<BR>&nbsp;<BR>5、Converting&nbsp;a&nbsp;String&nbsp;to&nbsp;Char*&nbsp;<BR>&nbsp;<BR>Question:&nbsp;<BR>&nbsp;I&nbsp;am&nbsp;trying&nbsp;to&nbsp;convert&nbsp;a&nbsp;String&nbsp;to&nbsp;char*&nbsp;but&nbsp;keep&nbsp;receiving&nbsp;&nbsp;<BR>the&nbsp;error:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Cannot&nbsp;cast&nbsp;from&nbsp;System::AnsiString&nbsp;to&nbsp;Char*&quot;.&nbsp;&nbsp;&nbsp;<BR>&nbsp;<BR>Below&nbsp;is&nbsp;my&nbsp;code.&nbsp;&nbsp;What&nbsp;am&nbsp;I&nbsp;doing&nbsp;wrong?&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;s;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char*&nbsp;ch;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;=&nbsp;&quot;test&quot;;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ch&nbsp;=&nbsp;PChar(s);&nbsp;<BR>&nbsp;<BR>Answer:&nbsp;<BR>What&nbsp;you&nbsp;need&nbsp;to&nbsp;do&nbsp;is&nbsp;use&nbsp;the&nbsp;c_str()&nbsp;member&nbsp;function&nbsp;of&nbsp;&nbsp;<BR>AnsiString.&nbsp;Here&nbsp;are&nbsp;a&nbsp;couple&nbsp;examples:&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;s;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;char*&nbsp;ch;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;=&nbsp;&quot;test&quot;;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ch&nbsp;=&nbsp;PChar(s.c_str());&nbsp;<BR>&nbsp;<BR>You&nbsp;can&nbsp;avoid&nbsp;the&nbsp;PChar&nbsp;completely&nbsp;if&nbsp;you&nbsp;like.&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;s;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;char*&nbsp;ch;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;=&nbsp;&quot;test&quot;;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ch&nbsp;=&nbsp;s.c_str();&nbsp;<BR>&nbsp;<BR>6、How&nbsp;do&nbsp;I&nbsp;obtain&nbsp;a&nbsp;char&nbsp;*&nbsp;from&nbsp;an&nbsp;AnsiString?&nbsp;<BR>&nbsp;<BR>Question:&nbsp;<BR>I've&nbsp;got&nbsp;<BR>&nbsp;<BR>AnsiString&nbsp;foo;&nbsp;<BR>&nbsp;<BR>How&nbsp;do&nbsp;I&nbsp;pass&nbsp;this&nbsp;to&nbsp;a&nbsp;function&nbsp;which&nbsp;needs&nbsp;a&nbsp;char?&nbsp;<BR>(eg.,&nbsp;strcpy,&nbsp;etc).&nbsp;<BR>&nbsp;<BR>Answer:&nbsp;<BR>foo-&gt;c_str().&nbsp;<BR>&nbsp;<BR>The&nbsp;c_str()&nbsp;method&nbsp;of&nbsp;the&nbsp;AnsiString&nbsp;class&nbsp;returns&nbsp;<BR>a&nbsp;const&nbsp;char*&nbsp;which&nbsp;can&nbsp;be&nbsp;used&nbsp;to&nbsp;read,&nbsp;but&nbsp;not&nbsp;<BR>modify,&nbsp;the&nbsp;underlying&nbsp;string.&nbsp;<BR>&nbsp;<BR>7、Getting&nbsp;command-line&nbsp;arguments&nbsp;in&nbsp;BCB&nbsp;<BR>&nbsp;<BR>Question:&nbsp;<BR>How&nbsp;can&nbsp;I&nbsp;access&nbsp;the&nbsp;list&nbsp;of&nbsp;parameters&nbsp;passed&nbsp;at&nbsp;the&nbsp;command&nbsp;<BR>line&nbsp;with&nbsp;BCB?&nbsp;<BR>&nbsp;<BR>Answer:&nbsp;<BR>You&nbsp;can&nbsp;use&nbsp;the&nbsp;following&nbsp;code:&nbsp;<BR>&nbsp;<BR>for&nbsp;(int&nbsp;x=0;&nbsp;x&nbsp;&lt;=&nbsp;ParamCount();&nbsp;x++)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;ShowMessage(ParamStr(0));&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>ParamStr(0)&nbsp;will&nbsp;return&nbsp;the&nbsp;fully&nbsp;qualified&nbsp;name&nbsp;of&nbsp;the&nbsp;<BR>executable&nbsp;file.&nbsp;<BR>&nbsp;<BR>8、Byte&nbsp;alignment&nbsp;in&nbsp;C++Builder&nbsp;<BR>&nbsp;<BR>Question:&nbsp;<BR>How&nbsp;do&nbsp;I&nbsp;get&nbsp;byte&nbsp;alignment&nbsp;in&nbsp;a&nbsp;struct&nbsp;in&nbsp;C++Builder&nbsp;<BR>&nbsp;<BR>Answer:&nbsp;<BR>#pragma&nbsp;pack(1)&nbsp;<BR>struct&nbsp;foo{&nbsp;/*&nbsp;put&nbsp;struct&nbsp;definition&nbsp;here&nbsp;*/&nbsp;};&nbsp;<BR>#pragma&nbsp;pack()&nbsp;<BR>&nbsp;<BR>9、Catching&nbsp;exceptions&nbsp;in&nbsp;a&nbsp;thread&nbsp;<BR>&nbsp;<BR>Question:&nbsp;<BR>How&nbsp;can&nbsp;I&nbsp;catch&nbsp;a&nbsp;C++&nbsp;exception&nbsp;in&nbsp;a&nbsp;thread.&nbsp;&nbsp;I&nbsp;have&nbsp;created&nbsp;a&nbsp;&nbsp;<BR>

⌨️ 快捷键说明

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