<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>ccli &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://wordpress.com/tag/ccli/</link>
	<description>Feed of posts on WordPress.com tagged "ccli"</description>
	<pubDate>Tue, 07 Oct 2008 01:51:14 +0000</pubDate>

	<generator>http://wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[THANKS FOR LISTENING!]]></title>
<link>http://4whatitsworth.wordpress.com/?p=316</link>
<pubDate>Wed, 03 Sep 2008 14:56:33 +0000</pubDate>
<dc:creator>saintlewis</dc:creator>
<guid>http://4whatitsworth.pt-br.wordpress.com/2008/09/03/thanks-for-listening/</guid>
<description><![CDATA[I just wanted to give a shout-out to all who came and and all who listened to us on 89.3FM, WECC The]]></description>
<content:encoded><![CDATA[<p>I just wanted to give a shout-out to all who came and and all who listened to us on <a href="http://www.thelighthousefm.org/" target="_blank">89.3FM, WECC The Lighthouse</a> last night, either in person, on the air, or online.  We recieved many encouraging words, and - I must say - we were really blessed to have been there and hope to return again soon in the coming months!</p>
<p>In the meanwhile, they've added our song "<em><span style="text-decoration:underline;"><strong>All in All (You're all I Need)</strong></span></em>" to their rotation, so be encouraged to give them a call (<strong>800-577-WECC</strong>) and request it when you're in the mood.</p>
<p>Lastly, we were asked by a few people for chordcharts of our originals last night.  Though they'll be on CCLI and on <a href="http://www.SaintLewisMusic.com/" target="_blank">our own website</a> soon, just drop me an email at saintlewis@bellsouth.net and I'll get them to you right away.  Thanks for listening, and for the encouragement - blessings to you and yours!</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[marshal_as String Arrays]]></title>
<link>http://rhnatiuk.wordpress.com/?p=199</link>
<pubDate>Fri, 01 Aug 2008 21:57:16 +0000</pubDate>
<dc:creator>Roman Hnatiuk</dc:creator>
<guid>http://rhnatiuk.pt-br.wordpress.com/2008/08/01/marshal-as-string-arrays/</guid>
<description><![CDATA[Giovanni Dicanio developed an extension (template specialization) to marshal_as&lt;&gt; library of V]]></description>
<content:encoded><![CDATA[<p>Giovanni Dicanio developed an extension (template specialization) to marshal_as&#60;&#62; library of Visual C++ 2008, to convert Unicode string arrays between managed (CLR) and native (STL/C++) code. The code is available at <a href="http://code.msdn.microsoft.com/MarshalAsStringArray">marshal_as String Arrays</a>.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Arrays in C++/CLI]]></title>
<link>http://rhnatiuk.wordpress.com/?p=68</link>
<pubDate>Thu, 19 Jun 2008 05:58:19 +0000</pubDate>
<dc:creator>Roman Hnatiuk</dc:creator>
<guid>http://rhnatiuk.pt-br.wordpress.com/2008/06/19/arrays-in-ccli/</guid>
<description><![CDATA[Nishant Sivakumar has pretty deep introduction of C++/CLI arrays (see also his blog for more interes]]></description>
<content:encoded><![CDATA[<p><a href="http://www.voidnish.com/">Nishant Sivakumar</a> has pretty deep introduction of <a href="http://www.codeproject.com/KB/mcpp/cppcliarrays.aspx">C++/CLI arrays</a> (see also his <a href="http://blog.voidnish.com/">blog</a> for more interesting stuff about mainly C++/CLI).</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Unexpected Benefits of CCLI]]></title>
<link>http://playtoworshiphim.wordpress.com/?p=21</link>
<pubDate>Fri, 30 May 2008 04:14:56 +0000</pubDate>
<dc:creator>journeytaker</dc:creator>
<guid>http://playtoworshiphim.pt-br.wordpress.com/2008/05/30/unexpected-benefits-of-ccli/</guid>
<description><![CDATA[After writing the article &#8220;Legally Singing Music in Your Church&#8221; , I went back to the CC]]></description>
<content:encoded><![CDATA[<p>After writing the article "Legally Singing Music in Your Church" , I went back to the CCLI website to explore the updates that they have made.  I must say I was quite surprised to see some of the things that are truly helpful and such a blessing!</p>
<p>As a member of CCLI, you also have access to chord charts and lead sheets to the songs in their data base.  You will not be disappointed with the selection of music to choose from.  This is a church musicians dream!</p>
<p>The first thing I looked at, of course, was the license manual located <a href="http://www.ccli.com/usa/LicenseHolder/LicenseManual.aspx" target="_blank">here</a>.  This is where you go to double check your own compliance with the copyright laws.  It is definitely the place you need to read and understand fully to implement the steps needed to come into compliance or to stay in compliance with the laws.</p>
<p>Next I visited <a href="http://www.ccli.com/usa/Community/CCLITV/Default.aspx" target="_blank">CCLITV</a>. Now that area is awesome! This is an area you will spend a lot of time in just watching and learning from the teaching videos.  There are videos done by some of the best musicians in the business, and they are teaching things that you can't find in most books.  I liked "Dynamics VS. Tempo", and then I saw "Piano Players vs. Guitar Players".  The last lesson is  a guitar lesson, but as a keyboardist it helped me tremendously with understanding how  guitarists think and how they approach music.  This also helped me to integrate some techniques that will help our praise band "gel" together even more.</p>
<p>I encourage you to go there for yourself and explore the articles, songs, lessons, and advice that this site has to offer.  Let it bless you and encourage you.  I was definitely helped so much, and I know you will be too!</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Legally Singing Songs in Church Services ]]></title>
<link>http://playtoworshiphim.wordpress.com/?p=18</link>
<pubDate>Tue, 27 May 2008 17:44:19 +0000</pubDate>
<dc:creator>journeytaker</dc:creator>
<guid>http://playtoworshiphim.pt-br.wordpress.com/2008/05/27/legally-singing-songs-in-church-services/</guid>
<description><![CDATA[This is a quote form a popular music learning website for church musicians:
If your church sings son]]></description>
<content:encoded><![CDATA[<h3>This is a quote form a popular music learning website for church musicians:</h3>
<p style="text-align:left;padding-left:30px;"><span style="color:#000080;"><strong>If your church sings songs that someone else recorded and you are not paying royalties via CCLI, you are a thief and a robber.</strong></span></p>
<p style="padding-left:30px;"><span style="color:#000080;"><strong>You can not legally display the words in public nor perform music without paying royalties.</strong></span></p>
<p style="padding-left:30px;"><span style="color:#000080;"><strong>You really can't even show videos to your youth group or bible study group without paying royalties either. Churches must also join CVLI (Christian Video Licensing Inc).  <a href="http://www.cvli.com/" target="_blank">www.cvli.com</a></strong></span></p>
<p style="padding-left:30px;"><span style="color:#000080;"><strong>How do you think gospel songwriters get paid? If your church is not a member of CCLI, you can join at <a href="http://www.ccli.com/" target="_blank">www.ccli.com</a></strong></span></p>
<p style="padding-left:30px;"><span style="color:#000080;"><strong>CCLI stands for Christian Copyrights Licensing Inc.</strong></span></p>
<p style="padding-left:30px;"><span style="color:#000080;"><strong>My church pays around $250 a year and we LEGALLY have access to the music that you hear and see on the radio and tv. Every three years they ask you to send them the list of the songs that you sing in worship so the people that actually wrote the songs you love to sing can get their royalty check (money for writing the song).</strong></span></p>
<p style="padding-left:30px;"><span style="color:#000080;"><strong>There are tons of benefits that go along with being a member of CCLI. There is access to thousands of songs with not just the lyrics but the chord progressions and lead sheets also (the words with the symbols for the chord progressions over them).</strong></span></p>
<p style="padding-left:30px;"><span style="color:#000080;"><strong>If you are not a member and do not plan on being a member, I pray that you realize that you are illegally stealing music and you can not play the role that you didn't know.</strong></span></p>
<p style="padding-left:30px;"><span style="color:#000080;"><strong>This is an area that our black churches definitely have dropped the ball. I pray that you align yourself with the legal practices of our country regarding the music that you sing in church.</strong></span></p>
<p style="padding-left:30px;"><span style="color:#000080;"><strong>If your church can not afford to do this at the time, please refrain from singing copy written music from the artists/songwriters that you can't afford to pay until you can.</strong></span></p>
<p style="padding-left:30px;"><span style="color:#000080;"><strong>Right is right and wrong is wrong. Please if your church is out of alignment, do the right thing and join.</strong></span></p>
<p style="padding-left:30px;"><span style="color:#000080;"><strong>MrSparrow</strong></span></p>
<p>I quoted this post from the site because I believe that Mr. Sparrow makes a strong case for churches doing what is right when it comes to the law of the land.  As a believer I  do not think we should knowingly break laws and set an example of breaking the law in our churches.  This thread became a hot topic on the site with many varying opinions on the legal implications involved in conducting praise and worship in our services.</p>
<p>Whether we agree with the law or not is a mute point in the eyes of God.  What does the Bible have to say concerning this? <span style="color:#ff0000;"><strong>Matthew 22:21 states "Give to Caesar what is Caesar's, and to God what is God's."</strong></span> That should end the debate right there.  It does not matter that I "feel" the law is unfair, pointless, or a waste of time and money, but that I am yielding to the Word of God no matter what.  My hear says I love God, and I will do what He wills.  Make sure your heart is right concerning this, and if your church is not in compliance with this law make it a priority to go to your pastor to be right with God in this area.</p>
<p>The link above will take you to the CCLI website so that you may see the rules and laws about what you can and can not do.  Take this seriously, because I don't want to see any church come under a lawsuit that will cost them so much more than the yearly fee to cover their use of others songs and lyrics.  I was told that this did happen to a church to the tune of about 300,000 dollars. (I have not verified this information yet) My point is that you do not want to give the enemy place to shut down your church over something like not making sure you are obeying the law in this area.  May it not be named among us!</p>
<p>What do you think about all of this?  Post your comments here and let me know what you think.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Information Literacy for a New Generation]]></title>
<link>http://librarian07.wordpress.com/?p=36</link>
<pubDate>Sun, 25 May 2008 17:18:27 +0000</pubDate>
<dc:creator>librarian07</dc:creator>
<guid>http://librarian07.pt-br.wordpress.com/2008/05/25/information-literacy-for-a-new-generation/</guid>
<description><![CDATA[An interesting thing (for me) happened while attending a workshop titled, &#8220;It&#8217;s the Mill]]></description>
<content:encoded><![CDATA[<p>An interesting thing (for me) happened while attending a workshop titled, "It's the Millennium: Do you know where your users are?" Offered by the <a href="http://ic.arc.losrios.edu/%7Eccli/">California Clearinghouse for Library Instruction</a>, it was a forum for three professionals in the field to present their findings and experience with their interaction with this specific user group. Dr. Alison J. Head, the Roy and Patricia Disney Visiting Professor in New Media Communications at Saint Mary's College discussed the results of her recent study of junior and senior undergraduates and their approach to academic research assignments (procrastination is borne out of a place of confusion and the unknown, not social distraction as common belief asserts).</p>
<p>Michelle Leigh Jacobs, Emerging Technologies and Web Coordinator of College Library at the University of California, Los Angeles, shared her experience and discussed how libraries and librarians must re-evaluate their methods of providing services in order to meet the information needs of this new generation using the library (using communication tools like: instant messaging; text messaging; online chat, and email, reference services increased; while in-person reference interviews continue to lag).</p>
<p>And finally, Stephen Abram, current Special Library Association president and Vice President Innovation for SirsiDynix and Chief Strategist for SyrsiDinix Institute, shared his insight on the challenges the professional field faces, and how librarians and libraries can utilize current and emerging technolgies (open source; pilot programs; social graph platforms; and of course<em>, Google</em>, <em>My Space, </em>and <em>Facebook</em>) to continue being "present" in the minds of the library user when navigating the explosion of information.</p>
<p>The workshop was absolutely inspiring and provided much food for thought. I hope that others felt the same!</p>
<p>I'll close with a link to a video created by Dr. Michael Wesch, Digital Ethnography professor at Kansas State University, "<a href="http://youtube.com/watch?v=dGCJ46vyR9o">A Vision of Students Today</a>." Linda Smith, one of the facilitators of this workshop, opened the session with this video. It set the tone, not only for the workshop, but for the field as it faces the challenges of remaining a presence in the minds of the millennial student.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[String to Proper Case in C++/CLI]]></title>
<link>http://jorgebucaran.wordpress.com/2008/02/09/8/</link>
<pubDate>Sat, 09 Feb 2008 18:16:20 +0000</pubDate>
<dc:creator>jorgedbucaran</dc:creator>
<guid>http://jorgebucaran.pt-br.wordpress.com/2008/02/09/8/</guid>
<description><![CDATA[Unfortunately there is no String::ToProperCase() in the .NET Framework, but there is TextInfo::ToTit]]></description>
<content:encoded><![CDATA[<p>Unfortunately there is no <code style="background-color:#eeeeee;">String::ToProperCase()</code> in the .NET Framework, but there is <code style="background-color:#eeeeee;"><a href="http://msdn2.microsoft.com/en-us/library/system.globalization.textinfo.totitlecase.aspx">TextInfo::ToTitleCase</a></code> which is not that bad and actually provides international support. Can't help a chuckle from that statement.<code> </code>However, if you don't like:</p>
<div style="border:1px dotted darkgray;font-size:large;background-color:#eeeeee;color:black;padding:5px;"><code><font color="#008080">TextInfo </font>^texti = <font color="#0000ff">gcnew </font><font color="#008080">CultureInfo</font>(<font color="#800000">"en-US"</font>, false)-&#62;TextInfo</code></div>
<p>You can always implement your own simplified version. I share mine here:</p>
<div style="border:1px dotted darkgray;font-size:large;background-color:#eeeeee;color:black;padding:5px;">
<pre><code><font color="#008080">String</font> ^toTitleCase(<font color="#008080">String</font> ^string)
{
    <font color="#008080">Text<font color="#000000">::</font>StringBuilder</font> ^stringb = <font color="#0000ff">gcnew </font><font color="#008080">Text<font color="#000000">::</font>StringBuilder</font>();
    <font color="#008080">Char </font>lastch = ' ';
    <font color="#0000ff">for each</font> (<font color="#008080">Char </font>ch <font color="#0000ff">in </font>string) {
        <font color="#0000ff">if </font>(<font color="#008080">Char</font>::IsLetter(ch) &#38;&#38; <font color="#008080">Char</font>::IsWhiteSpace(lastch)) {
            ch = <font color="#008080">Char</font>::ToUpper(ch);
        }
        lastch = ch;
        stringb-&#62;Append(ch);
    }
    <font color="#0000ff">return </font>stringb-&#62;ToString();
}</code></pre>
</div>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Part 2: How to Make Native Calls from Managed Code in C++/CLI]]></title>
<link>http://gregdolleysblog.wordpress.com/2008/02/03/part-2-how-to-make-native-calls-from-managed-code-in-ccli/</link>
<pubDate>Sun, 03 Feb 2008 23:34:08 +0000</pubDate>
<dc:creator>gregd1024</dc:creator>
<guid>http://gregs-blog.com/2008/02/03/part-2-how-to-make-native-calls-from-managed-code-in-ccli/</guid>
<description><![CDATA[This is an extension from my previous post on C++/CLI marshalling. In this segment I&#8217;m going t]]></description>
<content:encoded><![CDATA[<p align="justify">This is an extension from my <a href="http://gregdolleysblog.wordpress.com/2008/01/30/part-1-how-to-make-native-calls-from-managed-code-in-ccli/">previous post</a> on C++/CLI marshalling. In this segment I'm going to talk about <strong>sending an object from managed code to native code</strong>. While doing this kind of marshalling is required less and less these days as we depend more on external .NET components instead of COM DLL's or native C API's, there may still be times where you'll need to do it.</p>
<p align="justify">If you would like to play with the original source code discussed in this post, you can download it below:</p>
<ul>
<li>
<div align="justify"><a href="http://205.134.237.193/MarshallingBlogSample.zip">Download source projects</a> [~60k]</div>
</li>
</ul>
<h2>Native Library</h2>
<p align="justify">In order to keep the examples as simple as possible we're going to create our own native library (.lib) instead of using some third party API (rest assured however, whether you're calling the Win32 API or a third-party DLL, the process remains the same). Our library will contain one function and one native class. The class looks like this:</p>
<blockquote><p><font face="Courier New" size="2">class NativeObject<br>{<br>&#160;&#160; public:<br>&#160;&#160;&#160;&#160;&#160; NativeObject();<br></font><br><font face="Courier New" size="2">&#160;&#160; public:<br>&#160;&#160;&#160;&#160;&#160; char m_byte;<br>&#160;&#160;&#160;&#160;&#160; char *m_string;<br>&#160;&#160;&#160;&#160;&#160; int m_int;<br>&#160;&#160;&#160;&#160;&#160; float m_float_array[3];<br>};</font></p>
</blockquote>
<p align="justify">We will be creating the .NET equivalent of this class in different project. You will see how to marshal the .NET equivalent object into the following native library function:</p>
<blockquote><p><font face="Courier New" size="2">void SomeNativeFunction(NativeObject *obj)<br>{<br>&#160;&#160; printf("\r\nInside native library function. Object dump:\r\n\r\n");<br>&#160;&#160; printf("obj-&#62;m_byte = %i\r\n", obj-&#62;m_byte);<br>&#160;&#160; printf("obj-&#62;m_string = %s\r\n", obj-&#62;m_string);<br>&#160;&#160; printf("obj-&#62;m_int = %i\r\n", obj-&#62;m_int);<br>&#160;&#160; printf("obj-&#62;m_float_array[] = {%f, %f, %f}\r\n", <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; obj-&#62;m_float_array[0], <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; obj-&#62;m_float_array[1], <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; obj-&#62;m_float_array[2]);<br>}</font></p>
</blockquote>
<p align="justify">I put both the class definition and the prototype of SomeNativeFunction() into a header file called, "NativeSampleAPI.h." This header will used in the managed project so it can have access to the library's type(s) and function(s).</p>
<h2>Managed Object</h2>
<p align="justify">Now we will create a C++/CLI project using the following wizard template: "CLR Console Application." The first step is to create a managed class who's layout exactly matches the native class's layout byte-for-byte. For simple types such as int's and char's, choosing the correct managed type to match the corresponding native type is easy - in C++/CLI the native type "char" matches managed type "Byte," the type "int" matches "Int32," etc. However, for non-intrinsic types, choosing the equivalent can be confusing - how do you deal with an array which has an arbitrary size, or a string that is ANSI instead of unicode?</p>
<p align="justify">For these cases we use the "MarshalAs" member attribute to give the compiler more details on how we want the final unmanaged type to end up. See below for the complete conversion of our library's native type to .NET:</p>
<blockquote><p><font face="Courier New" size="2">[StructLayout(LayoutKind::Sequential)]<br>public ref class NativeObjectEquivalent<br>{<br>&#160;&#160; public:<br>&#160;&#160;&#160;&#160;&#160; NativeObjectEquivalent()<br>&#160;&#160;&#160;&#160;&#160; {<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; m_byte = 0x02;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; m_string = "Managed object";<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; m_int = 200;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; m_float_array = gcnew array&#60;float&#62;(3);<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; m_float_array[0] = 1.0f;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; m_float_array[1] = 2.1f;<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; m_float_array[2] = 3.2f;<br>&#160;&#160;&#160;&#160;&#160; }</font></p>
<p><font face="Courier New" size="2">
<p><br>&#160;&#160; public:<br>&#160;&#160;&#160;&#160;&#160; System::Byte m_byte;</p>
<p><br>&#160;&#160;&#160;&#160;&#160; [MarshalAs(UnmanagedType::LPStr)] <br>&#160;&#160;&#160;&#160;&#160; String ^m_string;<br>&#160;&#160;&#160;&#160;&#160; Int32 m_int;</p>
<p><br>&#160;&#160;&#160;&#160;&#160; [MarshalAs(UnmanagedType::ByValArray, <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; SizeConst=3, <br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ArraySubType=UnmanagedType::R4)]<br>&#160;&#160;&#160;&#160;&#160; array&#60;float&#62; ^m_float_array;<br>};</font></p>
</blockquote>
<p align="justify">The "MarshalAs" attribute applies to the member immediately following it. It accepts either a short or an "UnmanagedType" enum as the first parameter telling the compiler exactly which native type to use. If you need to specify more information about the type, such as fixed string length or array size, you would then fill in a series of named parameters following the first. For example, it's not enough to tell the compiler that "m_float_array" is an array - it also needs to know the array size and the native type of each element. That's where "SizeConst" and "ArraySubType" come into play. "SizeConst=3" tells the compiler that "m_float_array" is an array of fixed size and the number of elements it contains is three. "ArraySubType=UnmanagedType::R4" tells the compiler that it's a "float" array (a "double" array would have been specified with "R8" instead of "R4").</p>
<p align="justify">Now that the two types match in size, let's see how to pass the managed object to the native function. Take a look at the following code in our managed project:</p>
<blockquote><p><font face="Courier New" size="2">int main(array&#60;System::String ^&#62; ^args)<br>{<br>&#160;&#160; Console::WriteLine("Constructing managed object...");<br>&#160;&#160; NativeObjectEquivalent ^obj = gcnew NativeObjectEquivalent(); </font></p>
<p><font face="Courier New" size="2"></font>&#160;</p>
<p><font face="Courier New" size="2">&#160;&#160; Console::WriteLine("Writing managed object to unmanaged memory space...");<br>&#160;&#160; IntPtr ptr(Marshal::AllocHGlobal(Marshal::SizeOf(obj-&#62;GetType())));<br>&#160;&#160; Marshal::StructureToPtr(obj, ptr, false);</font></p>
<p><font face="Courier New" size="2">
<p><br>&#160;&#160; Console::WriteLine("Passing managed object to native function...");<br>&#160;&#160; SomeNativeFunction((NativeObject *)ptr.ToPointer());</p>
<p><br>&#160;&#160; Console::WriteLine();<br>&#160;&#160; Console::WriteLine("Press any key to continue...");<br>&#160;&#160; Console::ReadKey();</font></p>
<p><font face="Courier New" size="2">
<p><br>&#160;&#160; return 0;<br>}</font></p>
</blockquote>
<p align="justify">Let's go through things line by line (not counting print messages). First we create an instance of NativeObjectEquivalent, our managed version of the native class, via gcnew. Then AllocHGlobal() is called in order to allocate a chunk of memory from the unmanaged heap. It's important that the memory is <em>not</em> on the managed heap so we're ensured the pointer will never move (managed pointers can have their address changed during heap compaction). At this point we call StructureToPtr(). This function marshals a managed object into an unmanaged block of memory pointed to by the IntPtr. Finally, we call our library function converting the IntPtr into a native void pointer via the ToPointer() call. We must cast the void pointer into a NativeObject pointer to satisfy the compiler.</p>
<p align="justify">And... we're done! Let's look at the output:</p>
<p align="justify"><img style="border-width:0;" height="344" alt="MarshalToNativeAPI_SampleOutput" src="http://gregdolleysblog.files.wordpress.com/2008/02/image.png" width="681" border="0"> </p>
<p align="justify">Notice how m_string is set to "Managed object" - proving that the object inside our native function did indeed originate from the managed project. ;-)</p>
<h2>Conclusion</h2>
<p align="justify">This post, of course, only scratches the surface on the many different types of marshalling that can take place. Hopefully it has given you a good starting point for figuring out more advanced marshalling by yourself. If you have any questions or comments feel free to send me an email via my <a href="http://gregs-blog.com/contact/">Contact</a> page.</p>
<p align="justify">-Greg Dolley</p>
<p><em>*Get new posts automatically! <a href="http://feeds.feedburner.com/GregDolleysBlog">Subscribe via RSS here</a>. </em><em>Want email updates instead? <a href="http://www.feedburner.com/fb/a/emailverifySubmit?feedId=1397883&#38;amp;loc=en_US" target="_blank">Click here</a>.</em></p>
<p></font></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Part 1: How to Make Native Calls from Managed Code in C++/CLI]]></title>
<link>http://gregdolleysblog.wordpress.com/2008/01/30/part-1-how-to-make-native-calls-from-managed-code-in-ccli/</link>
<pubDate>Wed, 30 Jan 2008 07:24:44 +0000</pubDate>
<dc:creator>gregd1024</dc:creator>
<guid>http://gregs-blog.com/2008/01/30/part-1-how-to-make-native-calls-from-managed-code-in-ccli/</guid>
<description><![CDATA[Sometimes when working in a .NET environment we inevitably need to call a native function. With most]]></description>
<content:encoded><![CDATA[<p align="justify">Sometimes when working in a .NET environment we inevitably need to call a native function. With most .NET languages the programmer doesn’t need to have knowledge of the marshalling going on behind the scenes. However, programming in C++/CLI happens to be the exception.</p>
<p align="justify">While C++/CLI certainly does a better job at abstraction than the old managed C++ language in .NET 1.0, it doesn’t compare to the ease of C# or VB.NET. </p>
<p align="justify">This tutorial will be split into two posts: basic marshalling and advanced marshalling. This one will cover the basics - how simple data types are marshalled such as strings and character arrays.</p>
<h2>The Marshal Class</h2>
<p>Take a look at the following namespace:</p>
<ul>
<li>System::Runtime::InteropServices</li>
</ul>
<p align="justify">This namespace contains a class called “Marshal.” It is very versatile and will handle all the marshalling techniques presented in this tutorial. For most cases of managed to native calls, you’ll never have to look anywhere else.</p>
<h2>Functions Which Take String Arguments</h2>
<p align="justify">First, let’s look at a function which takes a series of native strings. We’re going to look at “printf()”. Since native strings are really just character buffer pointers, we need to convert a .NET “String” object into a character buffer pointed to by an IntPtr struct. Once we have an IntPtr, grabbing the native pointer comes down to calling one of its member functions. To do the first step we use the following function in Marshal:</p>
<ul>
<li>System::IntPtr Marshal::StringToHGlobalAnsi(System::String ^s)</li>
</ul>
<p align="justify">This function will allocate a character buffer and return an address via the IntPtr struct. Converting this into a native pointer is a simple matter of calling its "ToPointer()" member function. The "ToPointer()" function looks like this:</p>
<ul>
<li>void *IntPtr::ToPointer(void)</li>
</ul>
<p>Now we put both functions together like in the following code snippet:</p>
<blockquote><p>// Get .NET version string, convert to native char *, and print to screen with printf()
<p>&#160;
<p>Version ^v = Environment::Version;
<p>String ^ver_string = String::Format("{0}.{1}.{2}", v-&#62;Major, v-&#62;Minor, v-&#62;Build);
<p>&#160;
<p>char *native_string = (char *)Marshal::StringToHGlobalAnsi(ver_string).ToPointer();
<p>printf(".NET version: %s\r\n", native_string);
<p>Marshal::FreeHGlobal(IntPtr((void *)native_string));</p>
</blockquote>
<p align="justify">We must call "FreeHGlobal()" because the previous call to "StringToHGlobalAnsi()" allocated a buffer of characters on the unmanaged heap (just like calling "malloc()" in C or C++). Otherwise we would end up with a memory leak.</p>
<h2>Functions Which Return Strings</h2>
<p align="justify">OK, now we’re going to look at native functions which return strings. This time, we need to do the opposite of what we did in the last section – take a char pointer buffer (or unicode buffer) and convert it into a .NET String object. We do this via the "PtrToStringAnsi()" function inside the Marshal class. It looks like this:</p>
<ul>
<li>System::String ^Marshal::PtrToStringAnsi(System::IntPtr ptr)</li>
</ul>
<p align="justify">You must pass it a managed pointer wrapper instead of a native pointer, but the IntPtr object has a constructor that will do this conversion automatically. You’ll see how to use it in the following example.</p>
<p align="justify">We’re going to read some characters from a file via the native "fread()" function. This function fills in a buffer pointed to by the first parameter and returns the number of bytes read. If the function had instead returned a pointer directly via its return value, the conversion technique would be no different.</p>
<blockquote><p>char file_buffer[256];
<p>FILE *fp = fopen("c:\\Temp\\test.txt", "rb");
<p>&#160;
<p>memset(file_buffer, 0, sizeof(char)*256);
<p>fread(file_buffer, sizeof(char), 10, fp);
<p>String ^file_buffer_string = Marshal::PtrToStringAnsi(IntPtr((void *)file_buffer));
<p>&#160;
<p>fclose(fp);</p>
</blockquote>
<h2>Objects and Structures</h2>
<p align="justify">Strings and character buffers may not be the only thing you need to marshal between a managed context and a native call. You may come across a function that takes some predefined object – such as a native struct or class. These cases will be covered in part two of this tutorial which I will be posting in the next couple days.
<p align="justify">As always you can get new posts automatically using this <a href="http://feeds.feedburner.com/GregDolleysBlog">RSS feed</a>. Or if you prefer email updates, <a href="http://www.feedburner.com/fb/a/emailverifySubmit?feedId=1397883&#38;amp;loc=en_US">click here</a>.
<p align="justify">-Greg Dolley
<p align="justify"></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Wykorzystanie kodu C++ w C#]]></title>
<link>http://kurakdev.wordpress.com/2008/01/10/wykorzystanie-kodu-c-w-c/</link>
<pubDate>Thu, 10 Jan 2008 17:55:56 +0000</pubDate>
<dc:creator>Kurak</dc:creator>
<guid>http://kurakdev.pt-br.wordpress.com/2008/01/10/wykorzystanie-kodu-c-w-c/</guid>
<description><![CDATA[Przymierzam się do stworzenia edytora poziomów do Shadow Clones. Zamierzam użyć C# i Windows.For]]></description>
<content:encoded><![CDATA[<p>Przymierzam się do stworzenia edytora poziomów do Shadow Clones. Zamierzam użyć C# i Windows.Forms - wybór taki głównie z powodu szybkości i wygody pisania, ale także z chęci zdobycia większego doświadczenia w pisaniu na tę platformę. Na razie jednak czynię pewne przygotowania (niewiele ich jest - bo i niewiele ostatnio chce mi się robić) - między innymi uczę się ;) Ale po kolei: zamówienie na edytor wymaga ode mnie użycia części kodu gry w edytorze, by pewne rzeczy były zrealizowane identycznie (z tego, co udało mi się wymyślić, przeczytać i usłyszeć, chodzi głównie o wyszukiwanie ścieżek). Ponieważ przepisywanie kodu z C++ do C# mi się nie uśmiecha (szczególnie, jeśli byłoby tego dużo), postanowiłem poszukać sposobu na wykorzystanie kodu w C++ pod C#.</p>
<p>I znalazłem - zaraz go przedstawię i napiszę, co o nim myślę :)</p>
<p>Zakładam, że kod C++, który chcemy uruchomić spod C# jest w bibliotece DLL (nie jest to konieczne). W każdym razie, do zrobienia są 3 projekty:</p>
<ul>
<li>C++, DLL - tu będzie ten ważny kod C++</li>
<li>C++/CLI, Class Library - wrapper powyższego</li>
<li>C#, Console Application - program testowy</li>
</ul>
<p>Projekt 1 - normalny DLL, żeby można było z tego normalnie korzystać. Projekt 3 to zwykły test, w którym jedyna "ciekawa" operacja to dodanie referencji do DLLki wyprodukowanej przez najważniejsze projekt 2. To w nim jest najbrzydszy kod. Czemu? Wystarczy spojrzeć na "C++/CLI" i wszystko jasne ;)</p>
<p>Cała sztuka polega na tym, żeby dołączyć DLL pierwszego projektu do projektu 2 i napisać klasy .NET opakowujące i dające dostęp C#-owemu kodowi  do klas C++ z projektu 1. Tutaj trzeba też dokonać ewentualnych konwersji (np. std::string &#60;-&#62; System::String).</p>
<p>Pokrótce napisałem, o co chodzi - teraz pora na komentarz. Ogólnie rzecz biorąc, to cieszę się że to wszystko jest w ogóle możliwe w dosyć prosty sposób. Natomiast samo wykonanie... właściwie aż tak strasznie złe nie jest. Co prawda ciężko się pisze w Visual C++ ze szwankującym IntelliSensem kod z typowo sisharpowymi pozagnieżdżanymi namespace'ami, konieczność używania konstrukcji typu daszki ("^") czy "gcnew" też nie jest przyjemna, jednak wszystko to jest poukładane w miarę logicznie. Podsumowując - jest fajnie :)</p>
<p><b>Dopisane:</b></p>
<p>Okazało się, że niezbyt klarownie wytłumaczyłem, o co mi chodzi :) Dodam więc trochę kodu: to powinno być już całkiem zrozumiałe :)</p>
<p>Część 1: kod C++<br />
[sourcecode language='cpp']<br />
// Plik Foo.hpp<br />
#include <string></p>
<p>class DLLDEF CFoo<br />
{<br />
public:<br />
  CFoo();<br />
  ~CFoo();</p>
<p>  std::string getString() const;</p>
<p>  unsigned int getNumber() const;<br />
  void setNumber(unsigned int _value);</p>
<p>private:<br />
  std::string mString;<br />
  unsigned int mNumber;<br />
};</p>
<p>// Plik Foo.cpp<br />
#include "Foo.hpp"</p>
<p>CFoo::CFoo()<br />
{ }<br />
CFoo::~CFoo()<br />
{ }</p>
<p>std::string CFoo::getString()<br />
{<br />
  return mString;<br />
}</p>
<p>unsigned int CFoo::getNumber() const<br />
{<br />
  return mNumber;<br />
}</p>
<p>void CFoo::setNumber(unsigned int _value)<br />
{<br />
  mNumber = _value;<br />
}[/sourcecode]<br />
Część 2: Kod C++/CLI<br />
[sourcecode language='cpp']<br />
// Plik FooWrapper.h<br />
#include "Foo.hpp"<br />
#using <mscorlib.dll></p>
<p>namespace Bar<br />
{<br />
public ref class Foo<br />
{<br />
public:<br />
  Foo();<br />
  ~Foo();</p>
<p>  System::String^ GetString();</p>
<p>  unsigned int GetNumber();<br />
  void SetNumber(unsigned int value);</p>
<p>private:<br />
  Foo* NativePtr;<br />
};<br />
}</p>
<p>// Plik FooWrapper.cpp<br />
#include "FooWrapper.h"<br />
namespace Bar<br />
{<br />
Foo::Foo()<br />
{<br />
  NativePtr = new CFoo();<br />
}<br />
Foo::~Foo()<br />
{<br />
  delete CFoo();<br />
}</p>
<p>System::String^ Foo::GetString()<br />
{<br />
  std::string nts = NativePtr->getString();<br />
  System::String^ out = gcnew System::String(nts.c_str());<br />
  return out;<br />
}</p>
<p>unsigned int Foo::GetNumber()<br />
{<br />
  return NativePtr->getNumber();<br />
}</p>
<p>void Foo::SetNumber(unsigned int value)<br />
{<br />
  NativePtr->setNumber(value);<br />
}<br />
}[/sourcecode]<br />
Do tego trzeba jakoś dolinkować implementację CFoo - można dołączyć LIB (jeśli jest w DLLce), albo po prostu dołączyć plik Foo.cpp do projektu.</p>
<p>Część 3 - Kod C#<br />
[sourcecode language='csharp']<br />
// Plik FooTest.cs<br />
using System;</p>
<p>namespace FooTest<br />
{<br />
    class Program<br />
    {<br />
        static void Main(string[] args)<br />
        {<br />
            Bar.Foo foo = new Bar.Foo();<br />
            string str = foo.GetString();<br />
            uint num = foo.GetNumber();<br />
            foo.SetNumber(666);<br />
        }<br />
    }<br />
}[/sourcecode]<br />
Trzeba tylko dołączyć referencję do wrappera do projektu. I śmiga :)</p>
<p>Wrapper robi tutaj konwersję std::string -&#62; System::String, równie dobrze może konwertować obiekty pojemników STL na ich .NETowe odpowiedniki, jak również wiele innych rzeczy ;)</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[3º Encontro de Usuários de C/C++ de São Paulo]]></title>
<link>http://techberto.wordpress.com/2007/12/23/3%c2%ba-encontro-de-usuarios-de-cc-de-sao-paulo/</link>
<pubDate>Sun, 23 Dec 2007 19:54:30 +0000</pubDate>
<dc:creator>techberto</dc:creator>
<guid>http://techberto.pt-br.wordpress.com/2007/12/23/3%c2%ba-encontro-de-usuarios-de-cc-de-sao-paulo/</guid>
<description><![CDATA[Ocorrerá em São Paulo no dia 19 de Janeiro  de 2008, a terceira edição do encontro de usuários ]]></description>
<content:encoded><![CDATA[<p>Ocorrerá em São Paulo no dia 19 de Janeiro  de 2008, a terceira edição do encontro de usuários de C/C++ associados ao grupo C/C++ Brasil, isto é o <font face="Arial, Helvetica, sans-serif" size="3"><b><font color="#000080" size="4">   3º Sampa C/C++ Users Groups - Meeting</font></b></font>.</p>
<p>Esta 3ª edição, sendo a primeira no formato de reunião técnica com palestras, está focada na linguagem C++ e terá seguinte programação:</p>
<ul>
<li>09:30 às 10:00 - Introdução e Apresentação dos Membros do Encontro</li>
<li>10:00 às 11:00 - C++  com WxWidgets por  Ivo Nascimento</li>
<li> 11:00 às 11:30 - Debate</li>
<li>11:30 às 11:45 - Coffe-Break</li>
<li>11:45 às 12:45 - C++0x - Novas características de suporte a projetos de bibliotecas genéricas por Pedro Lamarão</li>
<li>12:45 às 13:15 - Debate</li>
<li>13:15 às 14:30 - Almoço</li>
<li>14:30 às 15:30 - <a href="http://www.cbrasil.org/wiki/index.php?title=Threads_no_CPP_ISO" title="Threads no CPP ISO">Threads no C++0x</a> - <a href="http://www.cbrasil.org/wiki/index.php?title=Wanderley_Caloni" title="Wanderley Caloni">Wanderley Caloni</a></li>
<li>15:30 às 16:00 - Debate</li>
<li>16:00 às 16:15 - Coffe-Break</li>
<li>16:10 às 17:30 - Forum sobre a Organização do Grupo de Usuários e da C/C++ Conference Brasil.</li>
<li><strike>17:30 às 20:00 - C/C++ Beer Meeting!</strike></li>
</ul>
<p>Os temas são avançados para usuários iniciantes, porém todos os usuários de C++ dispostos a participar são bem vindos!</p>
<p>A entrada é gratuita e a realização será no auditório da APEOSP que fica na Praça da República, 282, Centro - São Paulo.</p>
<p><font face="Arial, Helvetica, sans-serif" size="3">Este evento conta com o patrocínio  da AGIT Informática – Desenvolvimento, Consultoria &#38; Treinamentos em  C/C++ (<a href="http://www.agit.com.br/" target="_blank">www.agit.com.br</a>)   <b><br />
</b></font></p>
<p>Para maiores informações vejam o respectivo link no site <a href="http://www.cbrasil.org/wiki/index.php?title=Grade_de_Palestras" title="3º Encontro de Usuários de C/C++ em São Paulo" target="_blank">C/C++ Brasil</a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[再談 C++/CLI: Template Metaprogramming]]></title>
<link>http://zusecheng.wordpress.com/2007/12/06/%e5%86%8d%e8%ab%87-ccli-template-metaprogramming/</link>
<pubDate>Thu, 06 Dec 2007 02:04:21 +0000</pubDate>
<dc:creator>zusecheng</dc:creator>
<guid>http://zusecheng.pt-br.wordpress.com/2007/12/06/%e5%86%8d%e8%ab%87-ccli-template-metaprogramming/</guid>
<description><![CDATA[Template metaprogramming 是 Metaprogramming 的技巧之一, 也是 Modern C++ 中重要的元素
]]></description>
<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Template_metaprogramming">Template metaprogramming</a> 是 <a target="_blank" href="http://en.wikipedia.org/wiki/Metaprogramming">Metaprogramming</a> 的技巧之一, 也是 Modern C++ 中重要的元素<br />
基本上 <a href="http://en.wikipedia.org/wiki/Template_metaprogramming">Template metaprogramming</a> 是利用 <a href="http://en.wikipedia.org/wiki/Compiler">compiler</a> 來產生程式碼(不是目的碼喔)的一個方法<br />
至於要產生程式碼, 就有一個問題要考慮, 就是他的能力有多強<br />
然而 <a href="http://en.wikipedia.org/wiki/Template_metaprogramming">Template metaprogramming</a> 已經被證明是 <a href="http://en.wikipedia.org/wiki/Turing-complete">Turing-complete</a> <br />
也就是他能表達所有程式語言能表達的程式(嚴格的說是演算法)</p>
<p>舉一個例子來說 基本上大家舉例都舉 factorial <br />
我在這邊示範一下費伯納西數 費伯納西數得一個簡單的解法是使用遞迴<br />
然而費伯納西數可不是一個 Divide &#38; Conquer 的函式 (反而是 Divide &#38; Complex)<br />
所以不適合用遞迴 我們可以利用 <a href="http://en.wikipedia.org/wiki/Template_metaprogramming">Template metaprogramming</a>  把計算費伯納西數的工作交給編譯器<br />
這樣在執行時間 就不會花任何時間和記憶體(遞迴需要占用Stack Frame)來計算了</p>
<p>基本上 <a href="http://en.wikipedia.org/wiki/Template_metaprogramming">Template metaprogramming</a> 用到了template 中有 template 的技巧<br />
如此一來編譯器會把他遞迴展開 然後再利用特化來製造終止條件<br />
看以下的程式碼</p>
<pre>#include &#60;iostream&#62;    

<span style="color:#0000ff;">using</span> <span style="color:#0000ff;">namespace</span> std;    

<span style="color:#0000ff;">template</span> &#60;<span style="color:#0000ff;">unsigned</span> <span style="color:#0000ff;">int</span> n&#62;
<span style="color:#0000ff;">struct</span> Fibonacci {
  <span style="color:#0000ff;">enum</span> { value = Fibonacci &#60;n-1&#62;::value + Fibonacci &#60;n-2&#62;::value };
};    

<span style="color:#0000ff;">template</span>&#60;&#62;
<span style="color:#0000ff;">struct</span> Fibonacci &#60;0&#62; {
  <span style="color:#0000ff;">enum</span> { value = 0 };
};    

<span style="color:#0000ff;">template</span>&#60;&#62;
<span style="color:#0000ff;">struct</span> Fibonacci &#60;1&#62; {
  <span style="color:#0000ff;">enum</span> { value = 1 };
};    

<span style="color:#0000ff;">int</span> main() {
  cout &#60;&#60; Fibonacci&#60;5&#62;::value &#60;&#60; endl;
}</pre>
<p>看到這個程式 如果沒有覺得渾身不對勁 覺得這是邪魔歪道的 而且還覺得超炫<br />
恭喜你 你可以繼續看下去了 <a href="http://en.wikipedia.org/wiki/Template_metaprogramming">Template metaprogramming</a> 將會成為你讓人驚艷的技巧<br />
這邊有一個地方要說明的 就是 enum hack<br />
這是一個製造class 中 static const int 變數的方法<br />
當然上述寫 static const int 也是可以行得通的<br />
只是 大家比較習慣使用 enum hack<br />
Fibonacci&#60;15&#62;::value 會在編譯時期就 計算好數值 610</p>
<p>C#, VB 在2.0 之後 也支持泛型了 那能不能使用 <a href="http://en.wikipedia.org/wiki/Template_metaprogramming">Template metaprogramming</a> ?<br />
基本上是不行的 .NET 的泛型 既不是在Compiler Time展開<br />
也不能接受 non-type template parameter 更不用說有特化的能力<br />
也基本上只有 C++/CLI 能使用 template 來達成這個技巧<br />
然而 managed class 內不能接受 enum hack 的語法 所以要使用 static const int 來完成</p>
<p>下面來看Peter Simons用 <a href="http://en.wikipedia.org/wiki/Template_metaprogramming">Template metaprogramming</a> 用來解質數的例子  請參考 <a href="http://cryp.to/prime-sieve.html">prime-sieve.cc</a></p>
<pre><span style="color:#008000;">/*
* prime-sieve.cc -- written by Peter Simons &#60;simons@cryp.to&#62;
*
* This is an example of C++ template meta-programming. The interesting
* part is the primeSieve&#60;&#62; meta template, which will generate a list
* of integers in the range [2..n] using the Sieve of Erathostenes.
*/</span>    

<span style="color:#008000;">//////////////////////////////////////////////////</span>
<span style="color:#008000;">// Meta-programming Infrastructure</span>
<span style="color:#008000;">//////////////////////////////////////////////////</span>    

<span style="color:#0000ff;">struct</span> NullType { };    

<span style="color:#0000ff;">template</span>&#60;<span style="color:#0000ff;">typename</span> Head, <span style="color:#0000ff;">typename</span> Tail&#62;
<span style="color:#0000ff;">struct</span> Typelist
    {
    };    

<span style="color:#0000ff;">template</span>&#60;<span style="color:#0000ff;">unsigned</span> <span style="color:#0000ff;">int</span> Val&#62;
<span style="color:#0000ff;">struct</span> IntType
    {
    <span style="color:#0000ff;">enum</span> { value = Val };
    };    

<span style="color:#0000ff;">template</span>&#60;<span style="color:#0000ff;">bool</span> flag, <span style="color:#0000ff;">typename</span> T, <span style="color:#0000ff;">typename</span> U&#62;
<span style="color:#0000ff;">struct</span> Select
    {
    <span style="color:#0000ff;">typedef</span> T Result;
    };    

<span style="color:#0000ff;">template</span>&#60;<span style="color:#0000ff;">typename</span> T, <span style="color:#0000ff;">typename</span> U&#62;
<span style="color:#0000ff;">struct</span> Select&#60;<span style="color:#0000ff;">false</span>, T, U&#62;
    {
    <span style="color:#0000ff;">typedef</span> U Result;
    };    

<span style="color:#008000;">//////////////////////////////////////////////////</span>
<span style="color:#008000;">// Alorithm to create [i..n]</span>
<span style="color:#008000;">//////////////////////////////////////////////////</span>    

<span style="color:#0000ff;">template</span>&#60;<span style="color:#0000ff;">unsigned</span> <span style="color:#0000ff;">int</span> i, <span style="color:#0000ff;">unsigned</span> <span style="color:#0000ff;">int</span> n&#62;
<span style="color:#0000ff;">struct</span> makeIntList
    {
    <span style="color:#0000ff;">typedef</span> Typelist&#60; IntType&#60;i&#62;, <span style="color:#0000ff;">typename</span> makeIntList&#60;i+1, n&#62;::Result &#62; Result;
    };    

<span style="color:#0000ff;">template</span>&#60;<span style="color:#0000ff;">unsigned</span> <span style="color:#0000ff;">int</span> n&#62;
<span style="color:#0000ff;">struct</span> makeIntList&#60;n, n&#62;
    {
    <span style="color:#0000ff;">typedef</span> Typelist&#60; IntType&#60;n&#62;, NullType &#62; Result;
    };    

<span style="color:#008000;">//////////////////////////////////////////////////</span>
<span style="color:#008000;">// The Sieve of Erathostenes</span>
<span style="color:#008000;">//////////////////////////////////////////////////</span>    

<span style="color:#0000ff;">template</span>&#60;<span style="color:#0000ff;">unsigned</span> <span style="color:#0000ff;">int</span> i, <span style="color:#0000ff;">typename</span> TList&#62;
<span style="color:#0000ff;">struct</span> sieveOne;    

<span style="color:#0000ff;">template</span>&#60;<span style="color:#0000ff;">unsigned</span> <span style="color:#0000ff;">int</span> i, <span style="color:#0000ff;">typename</span> x, <span style="color:#0000ff;">typename</span> xs&#62;
<span style="color:#0000ff;">struct</span> sieveOne&#60; i, Typelist&#60;x,xs&#62; &#62;
    {
    <span style="color:#0000ff;">typedef</span> <span style="color:#0000ff;">typename</span> Select&#60;
        x::value % i != 0,
        Typelist&#60; x, <span style="color:#0000ff;">typename</span> sieveOne&#60;i, xs&#62;::Result &#62;,
        <span style="color:#0000ff;">typename</span> sieveOne&#60;i, xs&#62;::Result
                           &#62;::Result    Result;
    };    

<span style="color:#0000ff;">template</span>&#60;<span style="color:#0000ff;">unsigned</span> <span style="color:#0000ff;">int</span> i&#62;
<span style="color:#0000ff;">struct</span> sieveOne&#60;i, NullType&#62;
    {
    <span style="color:#0000ff;">typedef</span> NullType Result;
    };    

<span style="color:#0000ff;">template</span>&#60;<span style="color:#0000ff;">typename</span> TList&#62;
<span style="color:#0000ff;">struct</span> sieveAll;    

<span style="color:#0000ff;">template</span>&#60;<span style="color:#0000ff;">typename</span> x, <span style="color:#0000ff;">typename</span> xs&#62;
<span style="color:#0000ff;">struct</span> sieveAll&#60; Typelist&#60;x,xs&#62; &#62;
    {
    <span style="color:#0000ff;">typedef</span> Typelist&#60;
        x,
        <span style="color:#0000ff;">typename</span> sieveAll&#60;<span style="color:#0000ff;">typename</span> sieveOne&#60;x::value, xs&#62;::Result&#62;::Result
                    &#62;     Result;
    };    

<span style="color:#0000ff;">template</span>&#60;&#62;
<span style="color:#0000ff;">struct</span> sieveAll&#60;NullType&#62;
    {
    <span style="color:#0000ff;">typedef</span> NullType Result;
    };    

<span style="color:#0000ff;">template</span>&#60;<span style="color:#0000ff;">unsigned</span> <span style="color:#0000ff;">int</span> n&#62;
<span style="color:#0000ff;">struct</span> primeSieve
    {
    <span style="color:#0000ff;">typedef</span> <span style="color:#0000ff;">typename</span> sieveAll&#60;<span style="color:#0000ff;">typename</span> makeIntList&#60;2,n&#62;::Result&#62;::Result Result;
    };    

<span style="color:#008000;">// 省略把 Algorithm 包裝成 Interator 的部分 ...</span>    

<span style="color:#008000;">// TEST</span>    

#include &#60;iostream&#62;
#include &#60;iterator&#62;
<span style="color:#0000ff;">using</span> <span style="color:#0000ff;">namespace</span> std;    

<span style="color:#0000ff;">int</span> main(<span style="color:#0000ff;">int</span>, <span style="color:#0000ff;">char</span>**)
    {
    <span style="color:#0000ff;">enum</span> { n = 20 };
    cout &#60;&#60; "<span style="color:#8b0000;">Finding prime numbers in [2..</span>" &#60;&#60; n &#60;&#60; "<span style="color:#8b0000;">]:\n</span>";
    toIterator&#60;primeSieve&#60;n&#62;::Result &#62; generator;
    generator(ostream_iterator&#60;<span style="color:#0000ff;">int</span>&#62;(cout, "<span style="color:#8b0000;"> </span>"));
    cout &#60;&#60; "<span style="color:#8b0000;">\n</span>";    

    <span style="color:#0000ff;">return</span> 0;
    }    

<span style="color:#008000;">// Result</span>    

Finding prime numbers in [2..20]:    

2 3 5 7 11 13 17 19</pre>
<p>簡潔有力 效率高</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[STL/CLR: 2008 C++/CLI的利器]]></title>
<link>http://zusecheng.wordpress.com/2007/12/03/stlclr-2008-ccli%e7%9a%84%e5%88%a9%e5%99%a8/</link>
<pubDate>Mon, 03 Dec 2007 08:22:46 +0000</pubDate>
<dc:creator>zusecheng</dc:creator>
<guid>http://zusecheng.pt-br.wordpress.com/2007/12/03/stlclr-2008-ccli%e7%9a%84%e5%88%a9%e5%99%a8/</guid>
<description><![CDATA[C++/CLI 雖然算是ISO C++ 相容的一個語言
但是就EC++說的一樣 C++ 是一個語言聯]]></description>
<content:encoded><![CDATA[<p>C++/CLI 雖然算是ISO C++ 相容的一個語言<br />
但是就EC++說的一樣 C++ 是一個語言聯邦<br />
在STL中運作是需要共識的 也因為這樣 Managed Type 在  STL 沒有辦法 很正常的使用</p>
<p>VS2008中 C++/CLI 中加入了一個大利器 STL/CLR 這是一個 STL在CLR中的實作版本<br />
他將所有的元件放在 命名空間 <strong>cliext </strong>內 如 <strong>cliext :: vector</strong><strong><br />
</strong>組件檔是 <strong>Microsoft.VisualC.STLCLR.dll<br />
</strong>當然<strong>最重要的是 cliext </strong>內的容器是可以容納 Managed Type 的</p>
<p>為了能讓原始碼可以誇越STL和cliext<br />
我們可以使用下面的巨集<br />
#define _STL_OR_CLIEXT std 或 #define _STL_OR_CLIEXT cliext<br />
接下來使用 <strong>_STL_OR_CLIEXT::vector</strong> 就可以更改 _STL_OR_CLIEXT 的 來切換兩者 了<br />
範例如下</p>
<p>#ifdef _M_CEE<br />
#include &#60;cliext\vector&#62;<br />
#define _STD_OR_CLIEXT cliext<br />
#else<br />
#include &#60;vector&#62;<br />
#define _STD_OR_CLIEXT std<br />
#endif</p>
<p>如同STL, 在cliext的容器 中運作是也是需要共識的<br />
以下為想在cliext中運作的 Type (當然包含Managed Type ) 需要的共識</p>
<li>A public copy constructor.</li>
<li>A public assignment operator.</li>
<li>A public destructor.這東西最重要的功能除了正常的STL功能外<br />
最重要的當然是和別的容器互相利用囉 (如果沒有 大家也不會用他吧)<br />
需要互相利用的容器分成兩大類 一個是.NET Collection 一個是 STL Container</p>
<p>先談和 .NET Collection 的部分 : 這部分問題比較小<strong> cliext</strong> 有可以接受.NET Collection 的建構函式 可以使用<br />
或是利用<strong>cliext::collection_adapter </strong>來進行轉換<br />
逆向操作則是使用 <strong>cliext::make_collection<br />
</strong><br />
STL的部分 要使用VC2008的新功能 <strong><a href="http://msdn2.microsoft.com/en-us/library/bb384865(VS.90).aspx">msclr::interop::marshal_as</a></strong><br />
支援的型態如下表</p>
<table border="0" width="400" cellPadding="2" cellSpacing="0">
<tr>
<td width="100" vAlign="top"><b>From Type</b></td>
<td width="100" vAlign="top"><strong>To Type</strong></td>
<td width="100" vAlign="top"><b>Marshal method</b></td>
<td width="100" vAlign="top"><strong>Include file</strong></td>
</tr>
<tr>
<td width="100" vAlign="top">System::String^<br />
const char *<br />
char *<br />
System::String^<br />
const wchar_t *<br />
wchar_t *<br />
System::IntPtr<br />
HANDLE<br />
System::String^<br />
BSTR<br />
System::String^<br />
bstr_t<br />
System::String^<br />
std::string<br />
System::String^<br />
std::wstring<br />
System::String^<br />
CStringT&#60;char&#62;<br />
System::String^<br />
CStringT&#60;wchar_t&#62;<br />
System::String^<br />
CComBSTR</td>
<td width="100" vAlign="top">const char *<br />
System::String^<br />
System::String^<br />
const wchar_t*<br />
System::String^<br />
System::String^<br />
HANDLE<br />
System::IntPtr<br />
BSTR<br />
System::String^<br />
bstr_t<br />
System::String^<br />
std::string<br />
System::String^<br />
std::wstring<br />
System::String^<br />
CStringT&#60;char&#62;<br />
System::String^<br />
CStringT&#60;wchar_t&#62;<br />
System::String^<br />
CComBSTR<br />
System::String^</td>
<td width="100" vAlign="top">marshal_context<br />
marshal_as<br />
marshal_as<br />
marshal_context<br />
marshal_as<br />
marshal_as<br />
marshal_as<br />
marshal_as<br />
marshal_context<br />
marshal_as<br />
marshal_as<br />
marshal_as<br />
marshal_as<br />
marshal_as<br />
marshal_as<br />
marshal_as<br />
marshal_as<br />
marshal_as<br />
marshal_as<br />
marshal_as<br />
marshal_as<br />
marshal_as</td>
<td width="100" vAlign="top">marshal.h<br />
marshal.h<br />
marshal.h<br />
marshal.h<br />
marshal.h<br />
marshal.h<br />
marshal_windows.h<br />
marshal_windows.h<br />
marshal_windows.h<br />
marshal.h<br />
marshal_windows.h<br />
marshal_windows.h<br />
marshal_cppstd.h<br />
marshal_cppstd.h<br />
marshal_cppstd.h<br />
marshal_cppstd.h<br />
marshal_atl.h<br />
marshal_atl.h<br />
marshal_atl.h<br />
marshal_atl.h<br />
marshal_atl.h<br />
marshal_atl.h</td>
</tr>
</table>
<p>以下為所有的<strong> cliext</strong> 元件列表</p>
<ul>
<li><a href="http://msdn2.microsoft.com/bb157734(VS.90).aspx">adapter (STL/CLR)</a></li>
<li><a href="http://msdn2.microsoft.com/bb386172(VS.90).aspx">algorithm (STL/CLR)</a></li>
<li><a href="http://msdn2.microsoft.com/bb398188(VS.90).aspx">deque (STL/CLR)</a></li>
<li><a href="http://msdn2.microsoft.com/bb385677(VS.90).aspx">functional (STL/CLR)</a></li>
<li><a href="http://msdn2.microsoft.com/bb398039(VS.90).aspx">hash_map (STL/CLR)</a></li>
<li><a href="http://msdn2.microsoft.com/bb398091(VS.90).aspx">hash_multimap (STL/CLR)</a></li>
<li><a href="http://msdn2.microsoft.com/bb385647(VS.90).aspx">hash_multiset (STL/CLR)</a></li>
<li><a href="http://msdn2.microsoft.com/bb398130(VS.90).aspx">hash_set (STL/CLR)</a></li>
<li><a href="http://msdn2.microsoft.com/bb385936(VS.90).aspx">list (STL/CLR)</a></li>
<li><a href="http://msdn2.microsoft.com/bb385692(VS.90).aspx">map (STL/CLR)</a></li>
<li><a href="http://msdn2.microsoft.com/bb385271(VS.90).aspx">multimap (STL/CLR)</a></li>
<li><a href="http://msdn2.microsoft.com/bb157843(VS.90).aspx">multiset (STL/CLR)</a></li>
<li><a href="http://msdn2.microsoft.com/bb385117(VS.90).aspx">numeric (STL/CLR)</a></li>
<li><a href="http://msdn2.microsoft.com/bb385337(VS.90).aspx">priority_queue (STL/CLR)</a></li>
<li><a href="http://msdn2.microsoft.com/bb385855(VS.90).aspx">queue (STL/CLR)</a></li>
<li><a href="http://msdn2.microsoft.com/bb385157(VS.90).aspx">set (STL/CLR)</a></li>
<li><a href="http://msdn2.microsoft.com/bb157681(VS.90).aspx">stack (STL/CLR)</a></li>
<li><a href="http://msdn2.microsoft.com/bb386336(VS.90).aspx">utility (STL/CLR)</a></li>
<li><a href="http://msdn2.microsoft.com/bb386284(VS.90).aspx">vector (STL/CLR)</a></li>
</ul>
</li>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Perfomance do Visual C++ 2008]]></title>
<link>http://techberto.wordpress.com/2007/10/22/perfomance-do-visual-c-2008/</link>
<pubDate>Mon, 22 Oct 2007 04:47:43 +0000</pubDate>
<dc:creator>techberto</dc:creator>
<guid>http://techberto.pt-br.wordpress.com/?p=83</guid>
<description><![CDATA[  A perfomance do Visual C++ 2008 está ligeiramente melhor que o do VC++ 2005, e isto tenho notando]]></description>
<content:encoded><![CDATA[<p>  A perfomance do Visual C++ 2008 está ligeiramente melhor que o do VC++ 2005, e isto tenho notando nos testes que eu venho realizando e eu já vinha comentando com alguns amigos,  e lendo nos blogs do [1] Somasegar e do [2] Visual C++ Team é nítido que mais do que promessa, este tem sido um dos compromissos deles quanto a linguagem e ao ambiente.</p>
<p>Que o intellisense melhorou substancialmente eu já havia notado, mas que o desempenho melhorou "tanto" como eles [3] tem relatado sinceramente eu ainda não consegui perceber, pois eles sugerem um aumento 6x superior em alguns casos, mas de qualquer forma o David Berg - do time de engenharia de perfomance - fez [4] um convite-desafio bem interessante para os que tenham alguma observação sobre a perfomance entre os antecessores e o Visual C++ 2008; para que fiquem a vontade para reportar o caso para DevPerf@Microsoft.com; que sinceramente deixou-me mais empolgado em testá-lo melhor.</p>
<p>Por estas e mais algumas, recomendo visitas habitué ao blog do [2] VC++ Team e  principalmente ao do [1] Somasegar e não apenas pelo fato dele ser o VP da Divisão de Desenvolvimento da Microsoft - sendo responsável pelo Visual Studio e todas as linguagens, tecnologias e plataformas de desenvolvimento - mas porque ele é extremamente entusiasmado e está sempre fazendo posts de qualidade em seu blog que possue bastante interação dos seus leitores.</p>
<p>[1]  <a href="http://blogs.msdn.com/somasegar/" target="_blank">Somasegar WeBlog </a></p>
<p>[2] <a href="http://blogs.msdn.com/vcblog/default.aspx" id="bp___ctl00___bth___BlogTitle" class="headermaintitle">Visual C++ Team Blog</a></p>
<p>[3] <a href="http://blogs.msdn.com/vcblog/archive/2007/10/10/soma-blog-performance-improvements-in-visual-c-2008.aspx" target="_blank">Soma Blog:  Performance Improvements in Visual C++ 2008</a></p>
<p>[4]  <a href="http://blogs.msdn.com/somasegar/archive/2007/10/10/vc-performance-improvements-in-vs-2008.aspx" target="_blank">VC++ Performance Improvements in VS 2008</a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Find New Popular Worship Songs]]></title>
<link>http://billychia.com/2007/10/17/find-new-popular-worship-songs/</link>
<pubDate>Thu, 18 Oct 2007 00:18:04 +0000</pubDate>
<dc:creator>Billy Chia</dc:creator>
<guid>http://billychia.com/2007/10/17/find-new-popular-worship-songs/</guid>
<description><![CDATA[PW Archive&#8217;s Top Songs is a web 2.0 style worship resource that can help worship leaders find ]]></description>
<content:encoded><![CDATA[<p><a href="http://www.pwarchive.com/topsongs.aspx">PW Archive's Top Songs</a> is a web 2.0 style worship resource that can help worship leaders find out which new songs are popular in other churches. Learning which songs are used in heavy rotation in other churches in the US and around the world has several benefits:</p>
<ul>
<li><strong>Quality</strong>: Often songs are popular because they are of high quality both musically and lyrically. This is not always the case and there's room for personal taste. (I'm not always a fan of what's most popluar.) However, odds are that if you listen to songs that have popularity you will find several that you believe are also high quality.</li>
<li><strong>Community</strong>: Singing well-known songs breeds community and connectedness with other Christians around the world. How cool is it to go to a Promise Keepers convention or to visit a church overseas and sing the same songs you do on Sunday morning? You feel instantly connected with those other people becuase you sing the same songs. (Note: Community is not only a reason to sing the newest popular songs, but also to sing the oldest popular hymns. The older the better as you become connected with other Christians not simply across the world but across time as well. )</li>
<li><strong>Less Risk</strong>: Often times introducing a new song the congregation can be a nerve-wracking experience. There's doubt involved in whether they will like the new song or connect with it. Knowing that a song has been used effectively in other congregations helps lessen the risk involved in introducing new songs.</li>
</ul>
<p>Many worship leaders are familiar with <a href="http://www.ccli.com/US/WhatWeOffer/ChurchCopyrightLicenses/Top%20Songs.aspx">CCLI's Top 25</a>. This resource can be <strong>inaccurate</strong><strong> </strong>towards the end of learning which worship songs are popular. It is based on which songs get <em>reported </em>the most to CCLI, not necessarily which songs are <em>sung the most</em> in churches. (For example <em>Lord I Lift Your Name on High</em> by Rick Founds is Ranked #10 for August 2007 in the United States.) The CCLI Top 25 is probably a better representation an "All Time Greatest Worship Hits." These are songs that have stood the test of time, but you won't find a lot of newly popular songs.</p>
<p><a href="http://www.pwarchive.com/">PW Archive</a> (Praise/Worship Archive) likewise does not track which songs actually get sung the most. But it does track which chord charts are requested the most often.  By design this system has a propensity to highlight songs that are both <strong>new </strong>and <strong>popular</strong>. People most likely already have the chord charts for older tunes, but search online to find the chords for new songs.</p>
<h4>Top 5 songs for October 2007</h4>
<ol>
<li><strong>Amazing Grace (My Chains Are Gone)</strong> - Louie Giglio, Chris Tomlin, John Newton, Edwin O. Excell, John P. Rees - Copyright 2006</li>
<li><strong> From The Inside Out</strong> - Joel Houston - Copyright 2005</li>
<li><strong> Hosanna</strong>	 - Brooke Fraser - Copyright 2006</li>
<li><strong> Your Grace Is Enough</strong> - Chris Tomlin, Matt Maher - Copyright 2003</li>
<li><strong> Everlasting God</strong>	- Brenton Brown, Ken Riley - Copyright 2005</li>
</ol>
<p>As you can see from the copyright date, all of these songs were recently published.</p>
<p>Most of us use <em>PW Archive</em> as a place to get <strong>chords charts</strong>. It has some nice features, such as the ability to make an instant overhead or format your lead sheet in a variety of ways. However, I find that the chord <strong>charts are often wrong</strong>. (I personally use these charts more as a starting point to then figure songs our by ear.)</p>
<p>The real power of <em>PW Archive</em> is that it <strong>tracks </strong>how many times a chord chart get clicked on and then <strong>organizes </strong>that data.  Each month you will find a list of the 50 most popular chord charts.</p>
<p><a href="http://www.pwarchive.com/topsongs.aspx">Take a look at the top 50 for this month</a>. You may find a song on there you weren't aware of which would be worth looking into. This is a great resource for finding newly popular worship songs.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Songselect?]]></title>
<link>http://ucworship.wordpress.com/2007/10/08/songselect/</link>
<pubDate>Mon, 08 Oct 2007 20:54:30 +0000</pubDate>
<dc:creator>mjdaniel</dc:creator>
<guid>http://ucworship.pt-br.wordpress.com/2007/10/08/songselect/</guid>
<description><![CDATA[Many of you worship leaders out there use songselect from CCLI?  Do you find it helpful?  Any of you]]></description>
<content:encoded><![CDATA[<p>Many of you worship leaders out there use songselect from CCLI?  Do you find it helpful?  Any of you tie it into planningcenteronline.com?</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Act Your Age?]]></title>
<link>http://cecworship.wordpress.com/2007/09/17/act-your-age/</link>
<pubDate>Mon, 17 Sep 2007 17:55:38 +0000</pubDate>
<dc:creator>klampert</dc:creator>
<guid>http://cecworship.pt-br.wordpress.com/2007/09/17/act-your-age/</guid>
<description><![CDATA[
I&#8217;ve been thinking a lot lately and finding that I have more to say on life for this blog the]]></description>
<content:encoded><![CDATA[<p><img src="http://www.cecworship.com/blog/howold.jpg" /></p>
<p>I've been thinking a lot lately and finding that I have more to say on life for this blog then just showing the millions of readers cool resources. So here goes.</p>
<p>A funny thing has been coming into my brain lately..It has been spurred on by the many times I am around other adults and people my age. Usually it is when I am standing waiting for my son to come out of school, when we are at Navy, when I am waiting for my boy to finish his karate class, and most of all at guitar center(MECCA). This phenomenon is trying to find where I fit in. I am 30 years old prematurely bald and greying. I am married to a beautiful wickedly smart woman who does occupational therapy, a field where I could not survive on account of my lack of smartieness. I have 2 boys and one on the way. Why did I tell you that...well it's because I don't feel my age.</p>
<p>So there I am at my kids school with the other parents. They are in their BMW's and wicked pricey cars, wearing pretty nice clothes and living the life and look of a normal adult. Me...well I'm in carpenter jeans from old navy, sneakers, a hat that says Sugar Daddy and a Tshirt with Spiderman on the front.  For Christmas this past year every present I got on the box said for 5 and under. I have my Optimus Prime sitting on my desk right next to my batman and gandolf. I have guitars and one is decked out in tribal stickers. I still love skulls and all things rock n roll. and my kids sit with me and watch steve vai and guitar festival videos.</p>
<p>There is more I can go into, but the reality is this. I am a gen x'r and love every minute of it, but I am also moving quite fine into the ipod generation...the funny thing is this doesnt help me act my "Age"</p>
<p>How old are you...acting?</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Top 25 CCLI.com songs Aug 2007]]></title>
<link>http://cecworship.wordpress.com/2007/08/30/top-25-cclicom-songs-aug-2007/</link>
<pubDate>Thu, 30 Aug 2007 14:30:17 +0000</pubDate>
<dc:creator>klampert</dc:creator>
<guid>http://cecworship.pt-br.wordpress.com/2007/08/30/top-25-cclicom-songs-aug-2007/</guid>
<description><![CDATA[Well here is the top top list from www.ccli.com . They are the copyright managers for many publisher]]></description>
<content:encoded><![CDATA[<p>Well here is the top top list from www.ccli.com . They are the copyright managers for many publishers sheet music for worship.</p>
<p>Churches who download range from 10,00 member innovative church to a 10 member dark ages church.</p>
<p>What do you think of the list? surprised? are you doing any of these? have any of these been forever taken out of rotation?</p>
<p>answer those here...on top of that whats your top 10 must have worship songs? DONT ANSWER THAT NOW&#62;&#62;&#62;THINK ABOUT IT AND LOOK FOR ANOTHER POST POSING THAT QUESTION.</p>
<p>Rank      Song Title      Author/s      CCLI #<br />
1     How Great Is Our God         Tomlin, Chris \ Reeves, Jesse \ Cash, Ed     4348399<br />
2     Here I Am To Worship         Hughes, Tim     3266032<br />
3     Blessed Be Your Name         Redman, Beth \ Redman, Matt     3798438<br />
4     Open The Eyes Of My Heart     Baloche, Paul     2298355<br />
5     Forever             Tomlin, Chris     3148428<br />
6     Come Now Is The Time To Worship    Doerksen, Brian     2430948<br />
7     Holy Is The Lord         Tomlin, Chris \ Giglio, Louie     4158039<br />
8     You Are My King         Foote, Billy     2456623<br />
9     Shout To The Lord         Zschech, Darlene     1406918<br />
10     Lord I Lift Your Name On High     Founds, Rick     117947<br />
11     God Of Wonders             Byrd, Marc \ Hindalong, Steve     3118757<br />
12     We Fall Down             Tomlin, Chris     2437367<br />
13     You Are My All In All         Jernigan, Dennis     825356<br />
14     You're Worthy Of My Praise     Ruis, David     487976<br />
15     The Heart Of Worship         Redman, Matt     2296522<br />
16     Breathe             Barnett, Marie     1874117<br />
17     Trading My Sorrows         Evans, Darrell     2574653<br />
18     Beautiful One             Hughes, Tim     3915912<br />
19     Friend Of God             Gungor, Michael \ Houghton, Israel     3991651<br />
20     Better Is One Day         Redman, Matt     1097451<br />
21     Draw Me Close             Carpenter, Kelly     1459484<br />
22     Indescribable             Story, Laura     4403076<br />
23     Days Of Elijah             Mark, Robin     1537904<br />
24     Give Thanks             Smith, Henry     20285<br />
25     Lord Reign In Me         Brown, Brenton     2490706</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Aug 12 2007 Set List]]></title>
<link>http://cecworship.wordpress.com/2007/08/12/aug-12-2007-set-list/</link>
<pubDate>Sun, 12 Aug 2007 12:19:05 +0000</pubDate>
<dc:creator>klampert</dc:creator>
<guid>http://cecworship.pt-br.wordpress.com/2007/08/12/aug-12-2007-set-list/</guid>
<description><![CDATA[Processional
 How Deep the Father’s Love For Us – D (Townend)
Before The Throne of God Above - D]]></description>
<content:encoded><![CDATA[<p><strong>Processional</strong><br />
<strike> How Deep the Father’s Love For Us – D (Townend)</strike><br />
Before The Throne of God Above - D</p>
<p><strong>Praise</strong><br />
Here is Our King – G (Crowder)<br />
You Amaze Me – G (Michael Neale)<br />
Awesome God – G (Beeching)<br />
Hallelujah Love Song – G (klampert, Hanlon)</p>
<p><strong>Gospel</strong><br />
Open the Eyes – E (Baloche)</p>
<p><strong>Offering</strong><br />
Lead me to the Cross – D (Fraser)</p>
<p><strong>Sanctus</strong><br />
Holy – C (Brown)</p>
<p><strong>Mystery of Faith </strong><br />
Mystery of Faith – Dm (Klampert)</p>
<p><strong>Communion</strong><br />
Jesus Paid it All – G<br />
Enough – G (Tomlin, Giglio)<br />
Holy is the Lord - G (Tomlin, Giglio)</p>
<p><strong>Recessional</strong><br />
You Amaze Me – G (Michael Neale)<br />
<em>Bless His Name – A (Sanchez) ALT. Song<br />
<strike> More Than Ever – D (Reider) ALT. Song</strike></em></p>
]]></content:encoded>
</item>

</channel>
</rss>
