<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CUUHRn87fCp7ImA9WxNbEEg.&quot;"><id>tag:blogger.com,1999:blog-7274961</id><updated>2009-11-12T13:13:57.104-06:00</updated><title>Open Source, Computer-Aided Design, Pro/Toolkit, SolidWorks API</title><subtitle type="html">Interested in Open Source or CAD development?</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://ossandcad.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://ossandcad.blogspot.com/" /><link rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Ganeshram Iyer</name><uri>http://www.blogger.com/profile/09189272659983924981</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>33</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://feeds.feedburner.com/ossandcad" type="application/atom+xml" /><feedburner:emailServiceId>ossandcad</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fossandcad" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fossandcad" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/ossandcad" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fossandcad" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fossandcad" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry gd:etag="W/&quot;DkUEQH8yeCp7ImA9WxNVEUs.&quot;"><id>tag:blogger.com,1999:blog-7274961.post-5504239913218275452</id><published>2009-10-21T17:30:00.009-05:00</published><updated>2009-10-21T17:30:01.190-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-21T17:30:01.190-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="test" /><title>CEEFIT: I miss you</title><content type="html">I first &lt;a href="http://stackoverflow.com/questions/1468960/unit-and-integration-testing-in-c/1472755#1472755"&gt;noticed on Sep 24th&lt;/a&gt; that the web-site that hosts the &lt;a href="http://ceefit.woldrich.com/?page=Home"&gt;C++ implementation of FIT (CEEFIT)&lt;/a&gt; was gone. I get a "DNS Error. Cannot find server" error for the URL &lt;a href="http://ceefit.woldrich.com/"&gt;http://ceefit.woldrich.com/&lt;/a&gt;. Even &lt;a href="http://www.woldrich.com/"&gt;http://www.woldrich.com/&lt;/a&gt; is no longer found, with the same error might I add.&lt;br /&gt;
&lt;br /&gt;
This is not good. Indicates that the company that hosted/developed CEEFIT is gone taking some of the documentation for CEEFIT with it. While the source code for CEEFIT is still available at &lt;a href="http://sourceforge.net/projects/fit/files/"&gt;http://sourceforge.net/projects/fit/files/&lt;/a&gt;, some of the implementation details that were key for me to customize various aspects of CEEFIT are no longer available. If you use &lt;a href="http://code.google.com/p/ossandcad/downloads/list"&gt;any of the downloads&lt;/a&gt; that I provide through the "My Downloads" section, you have the necessary header files and libraries to use CEEFIT in your IntegratedTests. But you would need the original source code and documentation for any customizations.&lt;br /&gt;
&lt;br /&gt;
I have emailed Dave (using an old email address I have, which unfortunately is part of the woldrich.com domain) and hope I will hear back from him. I have requested he upload the documentation for CEEFIT to sf.net and I am really, really hoping he grants wishes.&lt;br /&gt;
&lt;br /&gt;
In the short term I am screwed, but fortunately there is an alternate implementation of &lt;a href="http://www.fitnesse.org/FrontPage.FitServers.CppFit.CppTestTools"&gt;FIT in C++&lt;/a&gt; available through &lt;a href="http://www.fitnesse.org/"&gt;http://www.fitnesse.org/&lt;/a&gt;. I have briefly tried fitnesse and have found the requirements they place to use their library (that I learn their Wiki markup to create tests and the ability to run a HTTP server on my build machine to run the tests) quite burdensome. But if I am going to continue C++ development and want to run Integrated Tests, I guess I have no other choice. But this time, I will be careful enough to create a personal mirror of &lt;a href="http://www.fitnesse.org/"&gt;www.fitnesse.org&lt;/a&gt; for myself, in case this too disappears off the face of the world(wideweb).&lt;br /&gt;
&lt;br /&gt;
But honestly this is one more of the reasons why I love open source. If CEEFIT was a closed source library and the company developing it, shut down, then I would definitely be screwed. Since I have the source for CEEFIT, I can continue to develop it (if I had the requisite skills, of course).&lt;br /&gt;
&lt;br /&gt;
So does CEEFIT going AWOL affect you?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7274961-5504239913218275452?l=ossandcad.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/t41yT_i3OCAIl3-OLR6E0PQ1zSM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t41yT_i3OCAIl3-OLR6E0PQ1zSM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/t41yT_i3OCAIl3-OLR6E0PQ1zSM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t41yT_i3OCAIl3-OLR6E0PQ1zSM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=JAvhVjMwECc:tiTnEDKQJIg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?i=JAvhVjMwECc:tiTnEDKQJIg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=JAvhVjMwECc:tiTnEDKQJIg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=JAvhVjMwECc:tiTnEDKQJIg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ossandcad/~4/JAvhVjMwECc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ossandcad.blogspot.com/feeds/5504239913218275452/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ossandcad.blogspot.com/2009/10/ceefit-i-miss-you.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/5504239913218275452?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/5504239913218275452?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ossandcad/~3/JAvhVjMwECc/ceefit-i-miss-you.html" title="CEEFIT: I miss you" /><author><name>Ganeshram Iyer</name><uri>http://www.blogger.com/profile/09189272659983924981</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="15240405801582043438" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://ossandcad.blogspot.com/2009/10/ceefit-i-miss-you.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUEQXs9eCp7ImA9WxNWF04.&quot;"><id>tag:blogger.com,1999:blog-7274961.post-7256561271924943580</id><published>2009-10-16T17:30:00.006-05:00</published><updated>2009-10-16T17:30:00.560-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-16T17:30:00.560-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="solidworks" /><title>Did uninstalling SolidWorks delete half my hard drive?</title><content type="html">I recently had to re-install SolidWorks 2009 on my laptop. During the uninstall process I noticed that several of my programs in the "C:\Program Files" folder went missing. Now I am not the one to start pointing fingers just yet, but this episode completely freaked me out. I had SolidWorks installed under "C:\Program Files\SolidWorks Corp" so would be more than surprised if this was in fact an error on the part of the SolidWorks uninstaller, but at the time of uninstallation, my laptop was not being used and no other "application window" was open. I also rarely log on with administrative privileges on either my XP or Vista laptop, so pretty low chance I accidentally deleted these folders myself (if I was that insane). I also did the usual checks for viruses, spyware and other junk, in vain.&lt;br /&gt;
&lt;br /&gt;
Oh well! That's life I guess.&lt;br /&gt;
&lt;br /&gt;
But during the reinstallation process I realized a quirk in the SolidWorks installation. Does it make sense to put header files required for SolidWorks Add-in development under the "samples" directory? Well that's what SolidWorks has done. So if you are developing SolidWorks add-ins, don't forget to select the "Examples" option in the SolidWorks Installation Manager, during the installation. Else you will not have the headers (e.g. "amapp.h") that you need for VC++ Add-in development.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7274961-7256561271924943580?l=ossandcad.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LKR3birkyTDpZZZw74KSLiqPbsw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LKR3birkyTDpZZZw74KSLiqPbsw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LKR3birkyTDpZZZw74KSLiqPbsw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LKR3birkyTDpZZZw74KSLiqPbsw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=4oNf2prQC84:j6exXLeOld4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?i=4oNf2prQC84:j6exXLeOld4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=4oNf2prQC84:j6exXLeOld4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=4oNf2prQC84:j6exXLeOld4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ossandcad/~4/4oNf2prQC84" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ossandcad.blogspot.com/feeds/7256561271924943580/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ossandcad.blogspot.com/2009/10/did-uninstalling-solidworks-delete-half.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/7256561271924943580?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/7256561271924943580?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ossandcad/~3/4oNf2prQC84/did-uninstalling-solidworks-delete-half.html" title="Did uninstalling SolidWorks delete half my hard drive?" /><author><name>Ganeshram Iyer</name><uri>http://www.blogger.com/profile/09189272659983924981</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="15240405801582043438" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://ossandcad.blogspot.com/2009/10/did-uninstalling-solidworks-delete-half.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08EQXs9eip7ImA9WxNWFkk.&quot;"><id>tag:blogger.com,1999:blog-7274961.post-8166298874032095645</id><published>2009-10-15T17:30:00.003-05:00</published><updated>2009-10-15T17:30:00.562-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-15T17:30:00.562-05:00</app:edited><title>Who uses BRL-CAD? An Anonymous answer</title><content type="html">This post is more of a response to a &lt;a href="http://ossandcad.blogspot.com/2009/09/and-worlds-oldest-source-code.html?showComment=1254231560610#c7187787251120041946"&gt;comment&lt;/a&gt; I received on my previous post titled &lt;span style="font-size: small;"&gt;&lt;a href="http://ossandcad.blogspot.com/2009/09/and-worlds-oldest-source-code.html"&gt;And the World's Oldest Source Code Repository is...&lt;/a&gt;&lt;/span&gt;. Since the commenter chose to remain anonymous, I had no way to respond other than to blog a new post. I will resume posting "useful" information with my next post.&lt;br /&gt;
&lt;br /&gt;
Firstly, Thanks 'Anonymous' (I knew I should not allowed people to comment on my posts anonymously, but it encourages more commenting from what I can tell), for your very detailed answer. I wonder if you are one of the &lt;a href="http://www.ohloh.net/p/brlcad/contributors"&gt;seemingly many&lt;/a&gt; contributors to the BRL-CAD source code.&lt;br /&gt;
&lt;br /&gt;
I would have been happier if you were able to provide some links to sites or people who use BRL-CAD, but I think I may be able to find at least 1 contact inside the U.S. Army Research Laboratory (ARL) who could enlighten me further.&lt;br /&gt;
&lt;br /&gt;
It has been a long time since I &lt;a href="http://sourceforge.net/projects/brlcad/files/BRL-CAD%20for%20Windows/"&gt;downloaded and tested the latest version&lt;/a&gt; of BRLCAD. I am hoping to be surprised by their user-friendliness though from their &lt;a href="http://brlcad.org/gallery/s/screenshots/"&gt;screenshots&lt;/a&gt; (mostly updated in Mar 2008), it still appears command-driven rather than menu-driven.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7274961-8166298874032095645?l=ossandcad.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/71dIgbh-4KJzSbMnK08ngGoTIxo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/71dIgbh-4KJzSbMnK08ngGoTIxo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/71dIgbh-4KJzSbMnK08ngGoTIxo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/71dIgbh-4KJzSbMnK08ngGoTIxo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=lijiMxj8EXk:Lzr6o4A2o08:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?i=lijiMxj8EXk:Lzr6o4A2o08:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=lijiMxj8EXk:Lzr6o4A2o08:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=lijiMxj8EXk:Lzr6o4A2o08:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ossandcad/~4/lijiMxj8EXk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ossandcad.blogspot.com/feeds/8166298874032095645/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ossandcad.blogspot.com/2009/10/who-uses-brl-cad-anonymous-answer.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/8166298874032095645?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/8166298874032095645?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ossandcad/~3/lijiMxj8EXk/who-uses-brl-cad-anonymous-answer.html" title="Who uses BRL-CAD? An Anonymous answer" /><author><name>Ganeshram Iyer</name><uri>http://www.blogger.com/profile/09189272659983924981</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="15240405801582043438" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://ossandcad.blogspot.com/2009/10/who-uses-brl-cad-anonymous-answer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EEQH05eyp7ImA9WxNQGUw.&quot;"><id>tag:blogger.com,1999:blog-7274961.post-3258485742004643826</id><published>2009-09-25T18:00:00.007-05:00</published><updated>2009-09-25T18:00:01.323-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-25T18:00:01.323-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cad" /><category scheme="http://www.blogger.com/atom/ns#" term="brl-cad" /><title>And the World's Oldest Source Code Repository is...</title><content type="html">Many years ago (actually in 2006), I had &lt;a href="http://ossandcad.blogspot.com/2006/10/open-source-software-in-mechanical.html"&gt;written &lt;/a&gt;about an Open Source CAD program known as &lt;a href="http://brl-cad.org/"&gt;BRL-CAD&lt;/a&gt; (note: the links to tutorials I had included in that post are no longer active and give a message "&lt;span style="font-size: small;"&gt;BRL-CAD became an open source project in December of 2004 and is no longer hosted on FTP.ARL.ARMY.MIL").&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Well surprisingly&amp;nbsp; BRL-CAD has been in the news for a while. Were you aware that according to &lt;a href="http://www.ohloh.net/"&gt;Ohloh&lt;/a&gt;, BRL-CAD has the &lt;a href="http://www.ohloh.net/blog/worlds_oldest_source_code_repositories"&gt;world's oldest open source repository&lt;/a&gt;? Can you believe that? The repository supposedly has been active since 1983.&lt;br /&gt;
&lt;br /&gt;
Well if you thought that was interesting then check this. BRL-CAD was also a participating organization in the &lt;a href="http://socghop.appspot.com/org/home/google/gsoc2009/brlcad"&gt;Google Summer of Code 2009&lt;/a&gt; and had 3 student interns who worked on as many projects. &lt;br /&gt;
&lt;br /&gt;
So the oldest CAD program is still being actively developed. That is interesting, but what I want to know is who is using BRL-CAD? I work for a CAD tools company and we have never been requested to even look at BRL-CAD as a possible CAD system to support. BRL-CAD's About page says that the U.S. Military is one of the clients. I have been on a Civilian installation of the U.S Army and have seen BRL-CAD installed on their lab computers. But none of the modelers were using it to deliver designs. So the question still stands - who is using BRL-CAD?&lt;br /&gt;
&lt;br /&gt;
Do any of you have any experience with BRL-CAD at your work? Does anyone use BRL-CAD for anything? Let me know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7274961-3258485742004643826?l=ossandcad.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8RUFbUpshqUfS_L1Z1yqKxmrMn0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8RUFbUpshqUfS_L1Z1yqKxmrMn0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8RUFbUpshqUfS_L1Z1yqKxmrMn0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8RUFbUpshqUfS_L1Z1yqKxmrMn0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=LL9kX2LoyVc:na2hL9RnsEY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?i=LL9kX2LoyVc:na2hL9RnsEY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=LL9kX2LoyVc:na2hL9RnsEY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=LL9kX2LoyVc:na2hL9RnsEY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ossandcad/~4/LL9kX2LoyVc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ossandcad.blogspot.com/feeds/3258485742004643826/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ossandcad.blogspot.com/2009/09/and-worlds-oldest-source-code.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/3258485742004643826?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/3258485742004643826?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ossandcad/~3/LL9kX2LoyVc/and-worlds-oldest-source-code.html" title="And the World's Oldest Source Code Repository is..." /><author><name>Ganeshram Iyer</name><uri>http://www.blogger.com/profile/09189272659983924981</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="15240405801582043438" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://ossandcad.blogspot.com/2009/09/and-worlds-oldest-source-code.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YNQ3k8fSp7ImA9WxNSGEs.&quot;"><id>tag:blogger.com,1999:blog-7274961.post-326910502009221835</id><published>2009-08-21T19:00:00.007-05:00</published><updated>2009-09-01T22:13:12.775-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-01T22:13:12.775-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cad" /><category scheme="http://www.blogger.com/atom/ns#" term="open cascade" /><title>Which Free 3D CAD program would I suggest?</title><content type="html">A few months ago I received a &lt;a href="http://ossandcad.blogspot.com/2009/05/unlocking-protk-applications-blog.html?showComment=1245659491251#c2215816725572062236"&gt;comment on one of my posts&lt;/a&gt;, asking me which free 3D CAD program I would suggest. You can see &lt;a href="http://ossandcad.blogspot.com/2009/05/unlocking-protk-applications-blog.html?showComment=1245962750458#c3629519456868395994"&gt;my response here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Answering JOE's (the commenter) request reminded me that I had posted &lt;a href="http://ossandcad.blogspot.com/2006/10/open-source-software-in-mechanical.html"&gt;a few articles&lt;/a&gt; in the past about Open Source CAD programs. Since then though I had pretty much given up searching for an open source CAD program that would provide at least a usable modeling tool (primarily because my initial search was futile).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
But I did keep my eyes open a little bit and came across &lt;a href="http://narocad.sourceforge.net/"&gt;NaroCAD &lt;/a&gt;a few months ago. Having followed &lt;a href="http://narocad.blogspot.com/"&gt;NaroCAD's feeds&lt;/a&gt; for that period I noticed that it is under quite active development. From the developer's blog "NaroCAD is an opensource CAD design tool written in C#/.NET and is built on top of proven OpenCascade library". In fact &lt;a href="http://narocad.blogspot.com/2009/06/narocad-10-released.html"&gt;NaroCAD reached 1.0 milestone&lt;/a&gt; a few months ago and they even provide .NET bindings for OpenCascade (including IronPython).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In my comment, I had recommended to JOE to use &lt;a href="https://www.alibre.com/Register/RequestInfo.aspx"&gt;Alibre Design Xpress&lt;/a&gt;, since it is free, and offers great capability at that price (check out &lt;a href="http://alibre.typepad.com/alibre_ceo_blog/"&gt;Alibre's CEO's blog&lt;/a&gt; - they even have a &lt;a href="http://alibre.typepad.com/alibre_ceo_blog/2009/08/alibre-99-price-offer-stuns-the-cad-industry.html"&gt;sale on Alibre Design Standard&lt;/a&gt; at the time of this writing, Aug 18 2009). I have not experimented with NaroCAD myself but considering its infancy I am relatively certain that its capabilities don't match Alibre's.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If the fact that I have a blog titled "Open Source Software and CAD" and am recommending a non-open-source program to my readers, alarms you, then don't be. I simply am recommending what I think is feasible. Most CAD users are not programmers. They may be versatile in creating Mapkey Automation or Macro scripts but mostly simply care about how complete their 2D/3D tools are for modeling purposes. In my experience with open source, attempting to use a program which has not matured, would usually result in much frustration to users who are not adept at looking at source code to solve any problems they may have (this is not to taint NaroCAD itself, it may be a great program, but just to explain my reason for the recommendation).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you feel upto it, I would suggest &lt;a href="http://sourceforge.net/project/platformdownload.php?group_id=198020"&gt;downloading NaroCAD&lt;/a&gt; and experimenting with it. I am relatively certain that you may need to download OpenCascade separately as the installer for NaroCAD does not seem large enough (15.6MB) to accommodate all of OpenCascade (175MB).&lt;br /&gt;
&lt;br /&gt;
UPDATE (8/30/2009): I stand corrected. One (of the 3 contributors to their blog) of the developers of NaroCAD (&lt;a href="http://www.blogger.com/profile/05409605028353356569"&gt;ciplogic&lt;/a&gt;) left a &lt;a href="http://ossandcad.blogspot.com/2009/08/which-free-3d-cad-program-would-i.html?showComment=1250920343095#c3655228326199346293"&gt;comment&lt;/a&gt; (still visible below this post) that NaroCAD uses only a subset of OpenCascade, which means that the ~15 MB download of NaroCAD is really all you need. So what are you waiting for? Have you downloaded NaroCAD? I have. &lt;br /&gt;
&lt;h1&gt;&lt;/h1&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7274961-326910502009221835?l=ossandcad.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vvOXNBu31uxk5G69bn4JMQ3U8RM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vvOXNBu31uxk5G69bn4JMQ3U8RM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vvOXNBu31uxk5G69bn4JMQ3U8RM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vvOXNBu31uxk5G69bn4JMQ3U8RM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=k1_0KW_fAIQ:mzez8J37A90:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?i=k1_0KW_fAIQ:mzez8J37A90:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=k1_0KW_fAIQ:mzez8J37A90:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=k1_0KW_fAIQ:mzez8J37A90:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ossandcad/~4/k1_0KW_fAIQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ossandcad.blogspot.com/feeds/326910502009221835/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ossandcad.blogspot.com/2009/08/which-free-3d-cad-program-would-i.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/326910502009221835?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/326910502009221835?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ossandcad/~3/k1_0KW_fAIQ/which-free-3d-cad-program-would-i.html" title="Which Free 3D CAD program would I suggest?" /><author><name>Ganeshram Iyer</name><uri>http://www.blogger.com/profile/09189272659983924981</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="15240405801582043438" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total><feedburner:origLink>http://ossandcad.blogspot.com/2009/08/which-free-3d-cad-program-would-i.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8EQ306eip7ImA9WxJbFEo.&quot;"><id>tag:blogger.com,1999:blog-7274961.post-7638149449371338613</id><published>2009-07-24T17:00:00.020-05:00</published><updated>2009-07-24T17:00:02.312-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-24T17:00:02.312-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="api" /><category scheme="http://www.blogger.com/atom/ns#" term="test" /><category scheme="http://www.blogger.com/atom/ns#" term="solidworks" /><title>SWX Batch mode Integrated Tests with CEEFIT</title><content type="html">If you have read any of my previous posts on Testing CAD Plugins, then you are aware of what I am trying to accomplish - an automated Integrated Test framework to test, at the very least, SolidWorks API Plugins. The following are some of the more relevant posts regarding Testing CAD Plugins:&lt;br /&gt;
&lt;div class="post"&gt;&lt;a href="http://draft.blogger.com/post-edit.g?blogID=7274961&amp;amp;postID=7638149449371338613" name="1076005790243930763"&gt;&lt;/a&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://ossandcad.blogspot.com/2009/03/solidworks-api-in-process-or-global.html"&gt;SolidWorks API - In-process or Global methods - Which to use?&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ossandcad.blogspot.com/2009/02/writing-ceefit-class-like-regular-c.html"&gt;Writing CEEFIT class like a regular C++ class&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ossandcad.blogspot.com/2008/04/batch-mode-solidworks.html"&gt;Batch mode SolidWorks&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ossandcad.blogspot.com/2008/04/batch-mode-proengineer.html"&gt;Batch mode Pro/Engineer&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ossandcad.blogspot.com/2009/04/mbunit-autocad-unit-testing-for-cad.html"&gt;MbUnit + AutoCAD = Unit testing for CAD Plugins&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;Some of you have even downloaded the sample workspace "swbatch.zip" posted in one of the posts above (Batch mode SolidWorks). For convenience the following is the "swbatch.zip" file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://ossandcad.googlecode.com/files/swbatch.zip"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5356961053423348338" src="http://2.bp.blogspot.com/_Ac0gUZe6XLk/Sle_shjmqnI/AAAAAAAAAfQ/lob5roUfKbk/s320/zip.jpg" style="cursor: pointer; float: left; height: 116px; margin: 0pt 10px 10px 0pt; width: 116px;" /&gt;&lt;br /&gt;
http://ossandcad.googlecode.com/files/swbatch.zip&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you prefer to download from the source, you can do so using the following link with your SVN client (e.g. &lt;a href="http://tortoisesvn.net/downloads"&gt;TortoiseSVN&lt;/a&gt; (follow the instructions at &lt;a href="http://code.google.com/p/ossandcad/source/checkout"&gt;http://code.google.com/p/ossandcad/source/checkout&lt;/a&gt;)):&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_Ac0gUZe6XLk/Slfi_rOrYRI/AAAAAAAAAfw/9JSFcfQ5VLI/s1600-h/subversion_logo-200x173.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_Ac0gUZe6XLk/Slfi_rOrYRI/AAAAAAAAAfw/9JSFcfQ5VLI/s200/subversion_logo-200x173.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="https://ossandcad.googlecode.com/svn/trunk/swbatch"&gt;&lt;br /&gt;
https://ossandcad.googlecode.com/svn/trunk/swbatch&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;The Pursuit of "CAD Plugin Testingness"&lt;/span&gt;&lt;br /&gt;
With this post I continue my pursuit of an automated Integrated Test Framework, using CEEFIT and dare I say it, I have come quite close to achieving my goal (my wishlist of sub-goals not yet achieved are listed at the end of this post).&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Download the IntegratedTests workspace&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
You can choose the zip format or access from SVN directly:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh4.ggpht.com/_Ac0gUZe6XLk/Sle_shjmqnI/AAAAAAAAAfQ/lob5roUfKbk/s1600/zip.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh4.ggpht.com/_Ac0gUZe6XLk/Sle_shjmqnI/AAAAAAAAAfQ/lob5roUfKbk/s200/zip.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;a href="http://ossandcad.googlecode.com/files/swxbatch_ceefit_6_16_2009.zip"&gt;http://ossandcad.googlecode.com/files/swxbatch_ceefit_6_16_2009.zip&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh5.ggpht.com/_Ac0gUZe6XLk/Slfi_rOrYRI/AAAAAAAAAfw/9JSFcfQ5VLI/s1600/subversion_logo-200x173.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh5.ggpht.com/_Ac0gUZe6XLk/Slfi_rOrYRI/AAAAAAAAAfw/9JSFcfQ5VLI/s200/subversion_logo-200x173.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://ossandcad.googlecode.com/svn/trunk/swxbatch_ceefit"&gt;https://ossandcad.googlecode.com/svn/trunk/swxbatch_ceefit&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;The "swxbatch_ceefit" workspace is an extension of the "swxbatch" workspace. The main difference is the ability to load SolidWorks and using API and CEEFIT, pass it input from the CEEFIT tables and verify expected output as mentioned in the CEEFIT tables.&lt;br /&gt;
&lt;br /&gt;
The solution is documented - but its my contention that nothing is ever documented enough - so if you need more information on how things work then leave a comment. I will put up another post that has more details.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Assumptions:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;You have SolidWorks installed and are working with appropriate licenses&lt;/li&gt;
&lt;li&gt;You may need to have the SolidWorks API SDK installed to write SolidWorks API-based code.&lt;/li&gt;
&lt;li&gt;You have access to Visual Studio (at least 2005, as this solution is provided in that version). Later versions should work but I have not tested them out.&lt;/li&gt;
&lt;/ul&gt;&lt;span style="font-size: large;"&gt;Wish list of sub-goals&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Passing in only HTML file (with CEEFIT tables) at a time is supported. This is how CEEFIT works by default, but it is not easy to test CAD stuff with all data in one single table. I wish for a solution to this and will post if I am successful. But for now it works as intended.&lt;/li&gt;
&lt;li&gt;Currently integration of CEEFIT-based solutions with Continuous Integration systems (e.g. &lt;a href="http://confluence.public.thoughtworks.org/display/CCNET/Welcome+to+CruiseControl.NET"&gt;CruiseControl.NET&lt;/a&gt;) is poor, as CEEFIT only puts out HTML files and at least CruiseControl.NET does not merge HTML output as part of its build log, which is a bummer as "true" integration would help us identify a failure, location and cause, which this current framework does not do. I wish to write out the output of CEEFIT as XML (at least) so that it can be integrated into build systems. (To be honest, FIT and thereby CEEFIT profess to be tools that enhances customer interaction with systems in development, so HTML works best, but for developers HTML is difficult to incorporate into their workflow).&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;The provided workspace is good only for SolidWorks. I wish for a solution that allows interaction with various CAD systems, through their individual API, and tests my plugin application with all of them.&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;span style="font-size: large;"&gt;Notes and Tips:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;The workspace, when run, starts SolidWorks in background (aka batch mode) by using a SolidWorks API, which simply hides the SolidWorks window.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint lang-cpp" style="margin-left: 40px;"&gt;swApp-&amp;gt;put_Visible(FALSE)&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;If you want to make SolidWorks visible during its batch operations, then change the FALSE to TRUE and rerun. SolidWorks starts up and you can see all API actions play out like a movie. I should say it is almost as fun to watch as a &lt;a href="http://www.youtube.com/watch?v=WA2qmVRLVZQ"&gt;video on Youtube&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;I have used a global variable "swApp" as I don't know how else to pass variables in to the CEEFIT run test classes. While not a big problem, I &lt;a href="http://googletesting.blogspot.com/2008/12/static-methods-are-death-to-testability.html"&gt;hate global variables as they make testing otherwise hard to do&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Please visit the home page for this and other projects: &lt;a href="http://ossandcad.googlecode.com/"&gt;http://ossandcad.googlecode.com&lt;/a&gt; for more information. I will try to update those pages soon and as regularly as possible.&lt;/li&gt;
&lt;li&gt;For more information on CEEFIT you can read the short summary I have at &lt;a href="http://ossandcad.blogspot.com/2008/05/protoolkit-solidworks-api-development.html"&gt;http://ossandcad.blogspot.com/2008/05/protoolkit-solidworks-api-development.html&lt;/a&gt; or even visit the CEEFIT homepage at &lt;a href="http://ceefit.woldrich.com/?page=Home"&gt;http://ceefit.woldrich.com/?page=Home&lt;/a&gt;. I should warn though that CEEFIT has not been updated for many years, but it works relatively well in its current stage. Hopefully enough of us use it to get the original author &lt;a href="mailto:dave@woldrich.com"&gt;dave@woldrich.com&lt;/a&gt; to continue development.&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;If you have downloaded "swxbatch.zip" to develop SolidWorks plugin applications (or Addins) then I sure that this workspace will be very useful to you. Let me know if you do or don't. Comments and suggestions are most welcome and will be responded to, so feel free to communicate your needs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7274961-7638149449371338613?l=ossandcad.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/t-doesOVh5L9U6hzXVnpOnBFsK8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t-doesOVh5L9U6hzXVnpOnBFsK8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/t-doesOVh5L9U6hzXVnpOnBFsK8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t-doesOVh5L9U6hzXVnpOnBFsK8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=CS8BP69iHmY:xK1tqL8aohQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?i=CS8BP69iHmY:xK1tqL8aohQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=CS8BP69iHmY:xK1tqL8aohQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=CS8BP69iHmY:xK1tqL8aohQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ossandcad/~4/CS8BP69iHmY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ossandcad.blogspot.com/feeds/7638149449371338613/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ossandcad.blogspot.com/2009/07/swx-batch-mode-integrated-tests-with.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/7638149449371338613?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/7638149449371338613?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ossandcad/~3/CS8BP69iHmY/swx-batch-mode-integrated-tests-with.html" title="SWX Batch mode Integrated Tests with CEEFIT" /><author><name>Ganeshram Iyer</name><uri>http://www.blogger.com/profile/09189272659983924981</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="15240405801582043438" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_Ac0gUZe6XLk/Sle_shjmqnI/AAAAAAAAAfQ/lob5roUfKbk/s72-c/zip.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://ossandcad.blogspot.com/2009/07/swx-batch-mode-integrated-tests-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcAQH8-eSp7ImA9WxJVFkk.&quot;"><id>tag:blogger.com,1999:blog-7274961.post-1981913870804280487</id><published>2009-07-03T11:54:00.011-05:00</published><updated>2009-07-03T11:54:01.151-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-03T11:54:01.151-05:00</app:edited><title>New "My Downloads" Section</title><content type="html">First, thanks to everyone who downloaded the workspaces that I had uploaded to this blog (using &lt;a href="http://www.box.net/"&gt;http://www.box.net&lt;/a&gt;). I hope you found them useful.&lt;br /&gt;
&lt;br /&gt;
Previously you could only find the uploaded workspaces by going to the individual posts. After noticing that these workspaces were being downloaded many times a week, I wanted to make it simpler for you, my readers, to find and download these workspaces.&lt;br /&gt;
&lt;br /&gt;
I have added a "My Downloads" section, on the left sidebar (at the time of this posting, just below the "Older posts of mine" section) that links the relevant downloads. This will be a permanent fixture on each blog post page.&lt;br /&gt;
&lt;br /&gt;
If you notice, these workspaces are being hosted on &lt;a href="http://code.google.com/projecthosting/"&gt;Google Code&lt;/a&gt; at &lt;a href="http://ossandcad.googlecode.com/"&gt;http://ossandcad.googlecode.com&lt;/a&gt; which is my new repository for storing and sharing my CAD-API-based plugins and applications.&lt;br /&gt;
&lt;br /&gt;
At the time of writing this post the following workspaces are made available on &lt;a href="http://ossandcad.googlecode.com/"&gt;http://ossandcad.googlecode.com&lt;/a&gt;:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://ossandcad.googlecode.com/files/ProToolkitVisualCpp.zip"&gt;Pro/Toolkit + Visual Studio 2005 Workspace&lt;/a&gt; (http://ossandcad.googlecode.com/files/ProToolkitVisualCpp.zip)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ossandcad.googlecode.com/files/swbatch.zip"&gt;SolidWorks Batch mode using SolidWorks API+COM&lt;/a&gt; (http://ossandcad.googlecode.com/files/swbatch.zip)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ossandcad.googlecode.com/files/swxbatch_ceefit_6_16_2009.zip"&gt;SWX+CEEFIT Integrated Test Workspace&lt;/a&gt; (http://ossandcad.googlecode.com/files/swxbatch_ceefit_6_16_2009.zip)&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;Comments, suggestions most welcome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7274961-1981913870804280487?l=ossandcad.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9cEMXrM5Dp34q53M0vnv9eT68x4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9cEMXrM5Dp34q53M0vnv9eT68x4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9cEMXrM5Dp34q53M0vnv9eT68x4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9cEMXrM5Dp34q53M0vnv9eT68x4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=Y0_A9ufL_HA:XuldVAVnjmQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?i=Y0_A9ufL_HA:XuldVAVnjmQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=Y0_A9ufL_HA:XuldVAVnjmQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=Y0_A9ufL_HA:XuldVAVnjmQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ossandcad/~4/Y0_A9ufL_HA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ossandcad.blogspot.com/feeds/1981913870804280487/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ossandcad.blogspot.com/2009/07/new-my-downloads-section.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/1981913870804280487?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/1981913870804280487?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ossandcad/~3/Y0_A9ufL_HA/new-my-downloads-section.html" title="New &quot;My Downloads&quot; Section" /><author><name>Ganeshram Iyer</name><uri>http://www.blogger.com/profile/09189272659983924981</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="15240405801582043438" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://ossandcad.blogspot.com/2009/07/new-my-downloads-section.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcFRnwyfyp7ImA9WxJVFUo.&quot;"><id>tag:blogger.com,1999:blog-7274961.post-8430309343194509551</id><published>2009-07-02T17:00:00.011-05:00</published><updated>2009-07-02T17:00:17.297-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-02T17:00:17.297-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cad" /><category scheme="http://www.blogger.com/atom/ns#" term="solidworks" /><category scheme="http://www.blogger.com/atom/ns#" term="protoolkit" /><title>New Google Code project to accompany this blog</title><content type="html">Thanks to all of you who have downloaded the various zips from my blog. I was using &lt;a href="http://www.box.net/"&gt;www.box.net&lt;/a&gt; to store and share my files. While box.net was sufficient, it was getting difficult to track usage and download rate, since I was only using the free version.&lt;br /&gt;
&lt;br /&gt;
To solve that problem and to find a simpler method to share my code, using a source code repository I have created a &lt;a href="http://code.google.com/projecthosting/"&gt;Google Code project&lt;/a&gt;. You can find my project at &lt;a href="http://ossandcad.googlecode.com/"&gt;http://ossandcad.googlecode.com&lt;/a&gt;. I have added an introduction and some Wiki pages and some files for download. &lt;br /&gt;
&lt;br /&gt;
The following files are available for download:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://ossandcad.googlecode.com/files/swbatch.zip"&gt;http://ossandcad.googlecode.com/files/swbatch.zip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ossandcad.googlecode.com/files/ProToolkitVisualCpp.zip"&gt;http://ossandcad.googlecode.com/files/ProToolkitVisualCpp.zip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ossandcad.googlecode.com/files/swxbatch_ceefit_6_16_2009.zip"&gt;http://ossandcad.googlecode.com/files/swxbatch_ceefit_6_16_2009.zip&lt;/a&gt; -If you wondering what this is, then you have two options - wait for my blog post detailing how to use CEEFIT with SolidWorks API to run IntegratedTests - or - you could download and start working with the source code right away.&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;The following Wiki pages are also available (but mostly duplicating content originally posted on this blog)&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/ossandcad/wiki/SwxBatch"&gt;http://code.google.com/p/ossandcad/wiki/SwxBatch&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;The biggest advantage of this for users is that you could download/browse my source code directly from SVN from &lt;a href="http://code.google.com/p/ossandcad/source/browse/#svn/trunk."&gt;http://code.google.com/p/ossandcad/source/browse/#svn/trunk.&lt;/a&gt;&amp;nbsp; For me the biggest advantage is the ability to track usage using Google Analytics.&lt;br /&gt;
&lt;br /&gt;
Comments/suggestions most welcome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7274961-8430309343194509551?l=ossandcad.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XqeJCzqIQC0KTUVzWWVYEx8rx7o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XqeJCzqIQC0KTUVzWWVYEx8rx7o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XqeJCzqIQC0KTUVzWWVYEx8rx7o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XqeJCzqIQC0KTUVzWWVYEx8rx7o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=CXS4cOPlN3w:KLka27VYUWI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?i=CXS4cOPlN3w:KLka27VYUWI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=CXS4cOPlN3w:KLka27VYUWI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=CXS4cOPlN3w:KLka27VYUWI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ossandcad/~4/CXS4cOPlN3w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ossandcad.blogspot.com/feeds/8430309343194509551/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ossandcad.blogspot.com/2009/07/new-google-code-project-to-accompany.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/8430309343194509551?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/8430309343194509551?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ossandcad/~3/CXS4cOPlN3w/new-google-code-project-to-accompany.html" title="New Google Code project to accompany this blog" /><author><name>Ganeshram Iyer</name><uri>http://www.blogger.com/profile/09189272659983924981</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="15240405801582043438" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://ossandcad.blogspot.com/2009/07/new-google-code-project-to-accompany.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMDSHc5cSp7ImA9WxJaFks.&quot;"><id>tag:blogger.com,1999:blog-7274961.post-7405378739115712693</id><published>2009-05-19T08:00:00.006-05:00</published><updated>2009-08-07T12:01:19.929-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-07T12:01:19.929-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="pro toolkit" /><category scheme="http://www.blogger.com/atom/ns#" term="protoolkit" /><title>Unlocking Pro/TK Applications - Blog Referral</title><content type="html">In one of previous posts titled "&lt;a href="http://ossandcad.blogspot.com/2008/09/license-needed-to-run-my-protoolkit-add.html"&gt;License needed to run my Pro/Toolkit add-ins"&lt;/a&gt; I received a comment requesting help using protk_unclock.exe to unlock the Pro/TK application provided in the same post. (For sake of convenience the following is the zip of the source for Pro/TK application)&lt;br /&gt;
&lt;br /&gt;
&lt;!--embed height="225" src="http://www.box.net/static/flash/box_explorer.swf?widgetHash=xvzvctm88c" type="application/x-shockwave-flash" width="400" wmode="transparent" /--&gt;&lt;br /&gt;
&lt;a href="http://ossandcad.googlecode.com/files/ProToolkitVisualCpp.zip"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5356961053423348338" src="http://2.bp.blogspot.com/_Ac0gUZe6XLk/Sle_shjmqnI/AAAAAAAAAfQ/lob5roUfKbk/s320/zip.jpg" style="cursor: pointer; float: left; height: 116px; margin: 0pt 10px 10px 0pt; width: 116px;" /&gt;&lt;br /&gt;
http://ossandcad.googlecode.com/files/ProToolkitVisualCpp.zip&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
As an answer to the question posed in that comment, I refer you to a post by my colleague, Amar Junankar, on his blog at &lt;a href="http://cadinterface.blogspot.com/2009/05/unlocking-protoolkit-application.html"&gt;http://cadinterface.blogspot.com/2009/05/unlocking-protoolkit-application.html&lt;/a&gt;. Amar has posted solutions for both developers and non-developers.&lt;br /&gt;
&lt;br /&gt;
Welcome to the blogging world Amar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7274961-7405378739115712693?l=ossandcad.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4V2QJ6sKRb1rMfZzAiAZmtO05RU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4V2QJ6sKRb1rMfZzAiAZmtO05RU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4V2QJ6sKRb1rMfZzAiAZmtO05RU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4V2QJ6sKRb1rMfZzAiAZmtO05RU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=w7zHStOCDqA:VUqd01yu7DQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?i=w7zHStOCDqA:VUqd01yu7DQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=w7zHStOCDqA:VUqd01yu7DQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=w7zHStOCDqA:VUqd01yu7DQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ossandcad/~4/w7zHStOCDqA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ossandcad.blogspot.com/feeds/7405378739115712693/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ossandcad.blogspot.com/2009/05/unlocking-protk-applications-blog.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/7405378739115712693?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/7405378739115712693?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ossandcad/~3/w7zHStOCDqA/unlocking-protk-applications-blog.html" title="Unlocking Pro/TK Applications - Blog Referral" /><author><name>Ganeshram Iyer</name><uri>http://www.blogger.com/profile/09189272659983924981</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="15240405801582043438" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_Ac0gUZe6XLk/Sle_shjmqnI/AAAAAAAAAfQ/lob5roUfKbk/s72-c/zip.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://ossandcad.blogspot.com/2009/05/unlocking-protk-applications-blog.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcEQXczeyp7ImA9WxVaEUg.&quot;"><id>tag:blogger.com,1999:blog-7274961.post-6814614020391053491</id><published>2009-04-07T21:00:00.002-05:00</published><updated>2009-04-07T21:00:00.983-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-07T21:00:00.983-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cad" /><category scheme="http://www.blogger.com/atom/ns#" term="test" /><title>MbUnit + AutoCAD = Unit testing for CAD Plugins</title><content type="html">&lt;span style="font-size: small;"&gt;If you follow my blog, you know that I develop CAD plug-ins in both .NET and C++. And in various posts of mine I have written about the difficulty of writing unit tests for these CAD plug-ins. The following are some of my more relevant posts regarding this topic.&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://ossandcad.blogspot.com/2008/04/protoolkit-solidworks-api-development.html"&gt;Pro/Toolkit, SolidWorks API Development Tools (C# Episode)&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ossandcad.blogspot.com/2008/05/protoolkit-solidworks-api-development.html"&gt;Pro/Toolkit, SolidWorks API Development Tools (C++ Episode)&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ossandcad.blogspot.com/2009/02/writing-ceefit-class-like-regular-c.html"&gt;Writing CEEFIT class like a regular C++ class&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;span style="font-size: small;"&gt;My usual solution was to avoid unit testing these CAD plugins and simply write integrated tests for them. The last post mentioned above (&lt;/span&gt;&lt;a href="http://ossandcad.blogspot.com/2009/02/writing-ceefit-class-like-regular-c.html"&gt;Writing CEEFIT class like a regular C++ class) &lt;/a&gt;specifically shows a sample &lt;a href="http://ceefit.woldrich.com/"&gt;CEEFIT&lt;/a&gt; (Framework for Integrated Test for C/C++) class that enables integrated testing using SWX (I will post the complete workspace to do this soon).&lt;br /&gt;
&lt;br /&gt;
But imagine my surprise when I read the following post about the release of MbUnit v3.0.5 - &lt;a href="http://weblogs.asp.net/astopford/archive/2009/04/02/mbunit-3-rtm.aspx"&gt;http://weblogs.asp.net/astopford/archive/2009/04/02/mbunit-3-rtm.aspx&lt;/a&gt;. The below text is an excerpt from that post (&lt;b&gt;bold &lt;/b&gt;and &lt;i&gt;italics &lt;/i&gt;are my addition):&lt;br /&gt;
&lt;blockquote&gt;Gallio provides MbUnit with the runner infrastructure and the list of supported runners is amazing, like MbUnit v2 you can still run MbUnit v3 in MSBuild, NAnt, TD.Net, CruiseControl, commandline (much more ehanched in v3) and GUI (&lt;a class="" href="http://www.gallio.org/Screenshots.aspx" mce_href="http://www.gallio.org/Screenshots.aspx"&gt;also vastly enhanced in v3&lt;/a&gt;) but now&amp;nbsp;tools such as TeamCity, VSTS, Resharper, Powershell, NCover, TypeMock and even &lt;i&gt;&lt;b&gt;AutoCAD&lt;/b&gt;&lt;/i&gt;.&lt;/blockquote&gt;That last word really caught my attention. What is this? Unit test support for CAD system plug-ins? That is so awesome it is beyond belief. A Google search for "AutoCAD MbUnit" gave more information via &lt;a href="http://blog.bits-in-motion.com/2008/11/announcing-gallio-and-mbunit-v305.html"&gt;http://blog.bits-in-motion.com/2008/11/announcing-gallio-and-mbunit-v305.html&lt;/a&gt;. An excerpt:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;h3&gt;AutoCAD Integration&lt;/h3&gt;Mike Sandberg has added support for testing AutoCAD plugins.&lt;br /&gt;
It turns out that AutoCAD has a managed extensibility model so you can create your own plugins using .Net and the ObjectARX toolkit.&amp;nbsp; Unfortunately it is somewhat difficult to write unit tests for plugins becuase they must run within the main UI thread of AutoCAD.&lt;br /&gt;
The AutoCAD integration for Gallio works by loading a shim into the AutoCAD application from which it can launch tests.&amp;nbsp; To enable this integration, specify the "AutoCAD" runner type to the Echo, Icarus, MSBuild, NAnt or PowerShell runners.&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Gallio.Echo.exe MyTestAssembly.dll /r:AutoCAD [other options...]&lt;br /&gt;
&lt;br /&gt;
AutoCAD integration is not yet available from within the IDE.&amp;nbsp; We will be working to improve this use case in the future.&lt;/blockquote&gt;OK. This definitely is promising. The post provides usage scenario, and although low on details on how this is achieved beyond saying "loading a shim", it is exactly what we CAD developers need.&lt;br /&gt;
&lt;br /&gt;
To learn more on how MbUnit developers solved this problem, I turned to the source code available at &lt;a href="http://mb-unit.googlecode.com/svn/trunk/v3/src/Extensions/AutoCAD"&gt;http://mb-unit.googlecode.com/svn/trunk/v3/src/Extensions/AutoCAD&lt;/a&gt;. From first glances it looks as though the shim can connect or load (via the "acad.exe" file) AutoCAD. The shim finds the path to "acad.exe" via the registry key&lt;br /&gt;
&lt;blockquote&gt;"HKEY_CURRENT_USER\Software\Autodesk\DWGCommon\shellex\Apps\{F29F85E0-4FF9-1068-AB91-08002B27B3D9}:AutoCAD".&amp;nbsp;&lt;/blockquote&gt;It then determines if your plugin is loaded and if yes, sends commands to it using a TestDriver (AcadTestDriver).&lt;br /&gt;
&lt;br /&gt;
What I found even more intriguing was the description of the problem that MbUnit developers intended to solve i.e. "difficulty of running unit tests as they run in the main UI thread of AutoCAD ". As I have contended, this is an universal problem for CAD developers. Replace AutoCAD with SolidWorks and the posts that I list above were intended to solve this very problem, although with a hack of a solution, but still following the same lines of thought. The CEEFIT workspace that I work with, loads SolidWorks in the background and using COM, connects to the running instance and then executes SWX-API-based tests. I let CEEFIT be the TestDriver and validate my output. The MbUnit framework has packaged idea this in beautiful .NET code.&lt;br /&gt;
&lt;br /&gt;
This brings up the possibility that since SolidWorks plugins can also be .NET based, would replacing AutoCAD connection commands with SolidWorks connection commands in MbUnit's framework, allow loading the shim into SolidWorks and run unit tests against SolidWorks. I will be exploring this possiblity in the coming weeks/months, as time permits.&lt;br /&gt;
&lt;br /&gt;
Do you develop AutoCAD plugins? Is this new functionality of MbUnit useful to you? Comments welcome.&lt;br /&gt;
&lt;h3 class="post-title"&gt;&lt;/h3&gt;&lt;span style="font-size: large;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7274961-6814614020391053491?l=ossandcad.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uZQiLPVDOXfIrmtkulJk3fqv98s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uZQiLPVDOXfIrmtkulJk3fqv98s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uZQiLPVDOXfIrmtkulJk3fqv98s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uZQiLPVDOXfIrmtkulJk3fqv98s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=93wldI-kzuE:1M9YmmddCVg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?i=93wldI-kzuE:1M9YmmddCVg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=93wldI-kzuE:1M9YmmddCVg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=93wldI-kzuE:1M9YmmddCVg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ossandcad/~4/93wldI-kzuE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ossandcad.blogspot.com/feeds/6814614020391053491/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ossandcad.blogspot.com/2009/04/mbunit-autocad-unit-testing-for-cad.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/6814614020391053491?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/6814614020391053491?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ossandcad/~3/93wldI-kzuE/mbunit-autocad-unit-testing-for-cad.html" title="MbUnit + AutoCAD = Unit testing for CAD Plugins" /><author><name>Ganeshram Iyer</name><uri>http://www.blogger.com/profile/09189272659983924981</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="15240405801582043438" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://ossandcad.blogspot.com/2009/04/mbunit-autocad-unit-testing-for-cad.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8ERHwzeCp7ImA9WxVWGUU.&quot;"><id>tag:blogger.com,1999:blog-7274961.post-1076005790243930763</id><published>2009-03-02T02:00:00.001-06:00</published><updated>2009-03-02T02:00:05.280-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-02T02:00:05.280-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cad" /><category scheme="http://www.blogger.com/atom/ns#" term="api" /><category scheme="http://www.blogger.com/atom/ns#" term="solidworks" /><title>SolidWorks API - In-process or Global methods - Which to use?</title><content type="html">&lt;span style="font-size: large;"&gt;Two SWX API to rule them (or is it 'Two SWX API to confuse us'?) &lt;/span&gt;&lt;br /&gt;
Did you know that SolidWorks (SWX) provides two distinct (yet confusingly similar) interfaces to 'get' or 'set' arrays through its API? Well it does. I recently installed SWX 2009 SP 2.0 (I know, I know - this release has been out for a while, but I never needed the newer features) - but I upgraded from SWX 2007 SP 0.0 when I ran into some vexing problem with the SWX API and hoping that it was an SWX bug, decided to try their newest version. Turns out the problem were me and my limited knowledge of these two API interfaces.&lt;br /&gt;
&lt;br /&gt;
The one advantage of installing SWX 2009 was the updated API documentation. The 2007 API documentation did not contain a page titled "In-process methods", which the 2009 version does. The following is an excerpt from that SWX 2009 API page (apihelp.chm) (italics are my addition) (note to lawyers: if it is not legal to publish portions of the SWX help documentation, please leave a comment and I will remove the appropriate sections)&lt;br /&gt;
&lt;blockquote&gt;&lt;i&gt;In-process Methods&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;The SolidWorks API provides two types of methods for interfaces that get or  set arrays:&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;ul style="list-style-type: disc;" type="disc"&gt;&lt;li class="kadov-p"&gt;&lt;i&gt;&lt;/i&gt; &lt;i&gt;in-process&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;ul style="list-style-type: disc;" type="disc"&gt;&lt;li class="kadov-p"&gt;&lt;i&gt;global&lt;/i&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;For example, IView  contains these methods:&lt;/i&gt;&lt;br /&gt;
&lt;ul style="list-style-type: disc;" type="disc"&gt;&lt;li class="kadov-p"&gt; &lt;i&gt;IView::IGetCThreads  (in-process)&lt;/i&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li class="kadov-p"&gt; &lt;i&gt;IView::GetCThreads  &amp;nbsp;(global)&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;i&gt;Both types of methods perform the same work, but each is more or less  appropriate for a given language and application. &lt;/i&gt;&lt;br /&gt;
&lt;i&gt;In-process methods typically begin with the letter I and get or set pointers  to arrays that only unmanaged C++  applications can handle. The in-process companion methods (i.e., similarly  named methods that do not begin with the letter I) are more globally useful both  inside a process and across processes and return predictable results for all of  the SolidWorks supported languages. &lt;/i&gt;&lt;br /&gt;
&lt;i&gt;In VBA, VB6, VB.NET, C#, and C++/CLI (also called managed C++), global  methods typically get or set a VARIANT or object that the programmer can iterate  as an array. In unmanaged C++, these methods get or set a pointer to a Dispatch  object that should be cast as a SafeDISPATCHArray. (SafeDISPATCHArray&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;is a VARIANT helper class defined in a  template class, which is available on the &lt;a href="http://files.solidworks.com/API/Examples/00000/0100s/0126/Example.htm" target="_blank"&gt;API Support website&lt;/a&gt;.)&lt;/i&gt;&lt;/blockquote&gt;&lt;span style="font-size: large;"&gt;Q. To chose or not to chose &lt;/span&gt;&lt;br /&gt;
So how do you decide which interface to use? Does it even matter?&lt;br /&gt;
&lt;span style="font-size: large;"&gt;A. &lt;/span&gt;The answer to the 2nd question 'does it even matter' is - simply - &lt;b&gt;YES IT DOES MATTER&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
To answer the 1st question 'how do you decide which interface to use' - consider the following:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;If&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;&lt;ol&gt;&lt;li&gt;you are building a DLL Add-in to SWX, &lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
AND&amp;nbsp; &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;you plan to only load that DLL through SWX &lt;b&gt;&lt;br /&gt;
&lt;br /&gt;
THEN &lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&lt;/li&gt;
&lt;li&gt;you can comfortably use the &lt;b&gt;"in-process method"&lt;/b&gt;.&lt;/li&gt;
&lt;/ol&gt;&lt;/ol&gt;&lt;ul&gt;&lt;li&gt;But if&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;&lt;ol&gt;&lt;li&gt;you are building an EXE that loads SWX through COM &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;AND &lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&lt;/li&gt;
&lt;li&gt;loads your SWX Add-in DLL (i.e. instantiates classes from the Add-in DLL in the EXE), allowing calls from the Add-in DLL to go to SWX &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;THEN &lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&lt;/li&gt;
&lt;li&gt;you need to use the &lt;b&gt;"global method"&lt;/b&gt; in &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;BOTH&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&lt;/li&gt;
&lt;li&gt;the COM+EXE and Add-in DLL.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;AND&lt;br /&gt;
&lt;br /&gt;
&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;LUCKILY YOU CAN STILL LOAD THE DLL ADD-IN DIRECTLY INTO SWX &lt;/b&gt;(doesn't that sound ideal?)&lt;b&gt;&lt;br /&gt;
&lt;/b&gt; &lt;/li&gt;
&lt;/ol&gt;&lt;/ol&gt;&lt;span style="font-size: large;"&gt;So how do you work this "global method"?&lt;/span&gt;&lt;br /&gt;
If you are like me and have little experience with COM, DISPATCH and VARIANTS then fear not because SolidWorks is gracious enough to provide us with a C++ template to simplify our lives. The files you need are hosted at &lt;a href="http://files.solidworks.com/API/Examples/00000/0100s/0126/Example.htm"&gt;http://files.solidworks.com/API/Examples/00000/0100s/0126/Example.htm&lt;/a&gt;. Simply download the zip file and include the "smartvars.h" file in your solution. The zip file also contains a sample in the file "usage.cpp", but for the sake of completness let me provide you with an example of my own:&lt;br /&gt;
&lt;blockquote&gt;VARIANT vxform;&lt;br /&gt;
LPSKETCH pSketch;&lt;br /&gt;
... &lt;br /&gt;
... // code to InsertSketch() so that pSketch is a valid pointer&lt;br /&gt;
...&lt;br /&gt;
pSketch-&amp;gt;get_ModelToSketchXform(&amp;amp;vxform);&lt;br /&gt;
SafeDoubleArray varDimArr(vxform);&lt;br /&gt;
wofstream wfs;&lt;br /&gt;
wfs.open(L"dimension_data_swx3dexpextrusion.txt");&lt;br /&gt;
for( int i = 0 ; i &amp;lt; 13 ; i ++ ) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wfs &amp;lt;&amp;lt; "\nXFormData at\t" &amp;lt;&amp;lt; i &amp;lt;&amp;lt; "\t=\t" &amp;lt;&amp;lt; varDimArr[i];&lt;br /&gt;
}&lt;br /&gt;
wfs.close();&lt;/blockquote&gt;&lt;span style="font-size: large;"&gt;CONCLUSION&lt;/span&gt;&lt;br /&gt;
SolidWorks API while easy to work with have a few surprises - though in this case the missing documentation would have spoiled the surprise for me in the 2007 version. So all in all, I am able to run batch-mode integration test using the combination of CEEFIT and "global methods" to access array data from SolidWorks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7274961-1076005790243930763?l=ossandcad.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uqkFzVK4tWF4MQgJKK5c5l8SI1g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uqkFzVK4tWF4MQgJKK5c5l8SI1g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uqkFzVK4tWF4MQgJKK5c5l8SI1g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uqkFzVK4tWF4MQgJKK5c5l8SI1g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=YxFMScXiNqM:gzG2it7ZT40:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?i=YxFMScXiNqM:gzG2it7ZT40:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=YxFMScXiNqM:gzG2it7ZT40:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/ossandcad?a=YxFMScXiNqM:gzG2it7ZT40:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ossandcad?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ossandcad/~4/YxFMScXiNqM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ossandcad.blogspot.com/feeds/1076005790243930763/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ossandcad.blogspot.com/2009/03/solidworks-api-in-process-or-global.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/1076005790243930763?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/1076005790243930763?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ossandcad/~3/YxFMScXiNqM/solidworks-api-in-process-or-global.html" title="SolidWorks API - In-process or Global methods - Which to use?" /><author><name>Ganeshram Iyer</name><uri>http://www.blogger.com/profile/09189272659983924981</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="15240405801582043438" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://ossandcad.blogspot.com/2009/03/solidworks-api-in-process-or-global.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cGQHo5eSp7ImA9WxVQFUg.&quot;"><id>tag:blogger.com,1999:blog-7274961.post-2234279000528497150</id><published>2009-02-02T01:17:00.002-06:00</published><updated>2009-02-02T01:17:01.421-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-02T01:17:01.421-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="visual studio" /><category scheme="http://www.blogger.com/atom/ns#" term="c++" /><category scheme="http://www.blogger.com/atom/ns#" term="test" /><category scheme="http://www.blogger.com/atom/ns#" term="solidworks" /><title>Writing CEEFIT class like a regular C++ class</title><content type="html">&lt;span style="font-size: large;"&gt;FIT / CEEFIT? &lt;/span&gt;&lt;br /&gt;
If you need to write integrated tests that can take a table specifying input data and expected output data, and run the tests in a batch, then you should consider &lt;a href="http://fit.c2.com/"&gt;Fit: Framework for Integrated Test&lt;/a&gt;. If you develop applications with C++, then look to &lt;a href="http://ceefit.woldrich.com/?page=Home"&gt;CEEFIT&lt;/a&gt; to satisfy your FIT needs.&lt;br /&gt;
&lt;br /&gt;
CEEFIT is well documented, flexible and an excellent integrated test framework. In most cases you can use the &lt;a href="http://ceefit.woldrich.com/?page=Using#macros"&gt;Macro method&lt;/a&gt; to create your test-classes, but CEEFIT also provides a way to create test-classes &lt;a href="http://ceefit.woldrich.com/?page=Using#manual"&gt;manually from scratch&lt;/a&gt;. This second 'manually from scratch' method is what this post talks about.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Why would you want to write CEEFIT classes from scratch?&lt;/span&gt;&lt;br /&gt;
Well one reason for me was to ensure that I could still use Doxygen to document the classes and their methods and parameters i.e. make the code-documentation doxygen-visible. I have not been able to figure out how to have the documentation be doxygen visible when using the macros.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;How to write CEEFIT class from scratch?&lt;/span&gt;&lt;br /&gt;
The &lt;a href="http://ceefit.woldrich.com/?page=Using#manual"&gt;example&lt;/a&gt; posted on CEEFIT's website is excellent and provides everything you need, but I found it a little too much. I simply wanted to write a class that inherits from COLUMNFIXTURE that looks like a regular C++ class - I did not want to mess with TABLE or DoRows(). Turned out to be very simple to do and here it is:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;TestSWX.h&lt;/span&gt;&lt;br /&gt;
namespace swx_ceefit {&lt;br /&gt;
/** A CEEFIT class created from scratch without macros to test batch-mode processing of SWX API cases.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; \author GRI&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; \date Dec 1 2008&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; class TestSWX :&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public CEEFIT::COLUMNFIXTURE&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; inline ceefit_init_spec TestSWX();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; inline virtual ceefit_dtor_spec ~TestSWX();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; private:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ceefit_init_spec TestSWX(const TestSWX&amp;amp;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; TestSWX&amp;amp; ceefit_init_spec operator=(const TestSWX&amp;amp;); &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /** fit_var&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; CEEFIT::STRING m_sldprt_name;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /** fit_test&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; double ceefit_call_spec nos_feats();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /** where is this executable executing from?&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; void ExecutingPath();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /** Get the full path to the input file i.e. the *.sldprt file&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; \author GRI&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; \date Jan 8 2009&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; void GetFullPath(std::wstring &amp;amp; wsFullPath);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br /&gt;
&amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;TestSWX.cpp&lt;/span&gt;&lt;br /&gt;
CComPtr&lt;isldworks&gt; swApp;&lt;br /&gt;
&lt;br /&gt;
namespace swx_ceefit&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ceefit_init_spec TestSWX::TestSWX()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; RegisterCeefitField(this, "sldprt_name", m_sldprt_name);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; RegisterCeefitTest(this, "nos_feats", &amp;amp;TestSWX::nos_feats);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //cout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; "constructing";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ceefit_dtor_spec TestSWX::~TestSWX() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //cout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; "destructing";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; double ceefit_call_spec TestSWX::nos_feats() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ExecutingPath();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; wstring wsFullPath;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; GetFullPath(wsFullPath);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if( swApp ) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; IModelDoc* swModel = NULL;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if( swApp-&amp;gt;put_Visible(FALSE) == S_OK ) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if( swApp-&amp;gt;DocumentVisible(FALSE, swDocPART) == S_OK ) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //wcout &amp;lt;&amp;lt; "\nfull path in nos_feats = " &amp;lt;&amp;lt; wsFullPath.c_str() &amp;lt;&amp;lt; endl;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; CComBSTR sFileName(wsFullPath.c_str());&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; CComBSTR sDefaultConfiguration(L"Default");&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; long fileerror;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if( swApp-&amp;gt;IOpenDocSilent(sFileName.m_str, swDocPART, &amp;amp;fileerror, &amp;amp;swModel) == S_OK ) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if( swModel != NULL ) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; IPartDoc *part;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; HRESULT hres = swModel-&amp;gt;QueryInterface(IID_IPartDoc, (LPVOID *)&amp;amp;part);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if( swModel-&amp;gt;put_Visible(FALSE) == S_OK ) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; CComPtr&lt;ifeature&gt; swfeat;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if( part-&amp;gt;IFirstFeature(&amp;amp;swfeat) == S_OK ) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; CComBSTR name;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; swfeat-&amp;gt;get_Name(&amp;amp;name);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; wcout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; "1st feat name = " &amp;lt;&amp;lt; name.m_str;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; swModel-&amp;gt;Quit();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else wcout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; "no first feature";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else wcout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; "swModel still visible";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; wcout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; "swModel = NULL with fileerror = " &amp;lt;&amp;lt; fileerror;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else wcout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; "open doc not silent";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else wcout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; "document still visible";&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; else wcout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; "ERROR: swApp = NULL" &amp;lt;&amp;lt; "\tfile\t=\t" &amp;lt;&amp;lt; __FILE__ &amp;lt;&amp;lt; "\tline\t=\t" &amp;lt;&amp;lt; __LINE__;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; VARIANT_BOOL ret;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; swApp-&amp;gt;CloseAllDocuments(TRUE, &amp;amp;ret);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return 1;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; void TestSWX::ExecutingPath() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; wchar_t sExecPath[MAX_PATH];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; GetModuleFileName(NULL, sExecPath, MAX_PATH);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //wcout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; "executable = " &amp;lt;&amp;lt; sExecPath;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; void TestSWX::GetFullPath(wstring &amp;amp; wsFullPath) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; wchar_t cFullPath[MAX_PATH] = TEXT("");&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; LPTSTR&amp;nbsp; lpszFilePart = NULL;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; GetFullPathName(m_sldprt_name.GetBuffer(), MAX_PATH, cFullPath, &amp;amp; lpszFilePart);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //wcout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; "full path = " &amp;lt;&amp;lt; cFullPath;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; wsFullPath = cFullPath;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; static REGISTERFIXTURECLASS&amp;lt; TestSWX &amp;gt; FatTableFixtureRegistration("swx_ceefit::TestSWX", "AKA_TESTSWX");&amp;nbsp; &lt;br /&gt;
&lt;/ifeature&gt;&lt;/isldworks&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Conclusion&lt;/span&gt;&lt;br /&gt;
If you are wondering why this class is called TestSWX (SWX = short for SolidWorks), then consider this: using the solution from a previous post of mine "&lt;a href="http://ossandcad.blogspot.com/2008/04/batch-mode-solidworks.html"&gt;Batch mode SolidWorks&lt;/a&gt;" we can start SolidWorks without GUI and using the above CEEFIT class, call SolidWorks API and run your integrated tests. But that my readers is possibly a separate post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7274961-2234279000528497150?l=ossandcad.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FJ8RSvqTYgXeBJZjMgXreLLUVjU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FJ8RSvqTYgXeBJZjMgXreLLUVjU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/FJ8RSvqTYgXeBJZjMgXreLLUVjU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FJ8RSvqTYgXeBJZjMgXreLLUVjU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=y9tODY2H"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?i=y9tODY2H" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=2p2hqu60"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=JTlKgc5E"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ossandcad/~4/Eie2XXq5HlQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ossandcad.blogspot.com/feeds/2234279000528497150/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ossandcad.blogspot.com/2009/02/writing-ceefit-class-like-regular-c.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/2234279000528497150?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/2234279000528497150?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ossandcad/~3/Eie2XXq5HlQ/writing-ceefit-class-like-regular-c.html" title="Writing CEEFIT class like a regular C++ class" /><author><name>Ganeshram Iyer</name><uri>http://www.blogger.com/profile/09189272659983924981</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="15240405801582043438" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://ossandcad.blogspot.com/2009/02/writing-ceefit-class-like-regular-c.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MGRH0yfyp7ImA9WxRbFEs.&quot;"><id>tag:blogger.com,1999:blog-7274961.post-5741566434338899317</id><published>2008-12-04T21:41:00.001-06:00</published><updated>2008-12-05T01:17:05.397-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-05T01:17:05.397-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="visual studio" /><category scheme="http://www.blogger.com/atom/ns#" term="office" /><title>Office 2003 Addin using Visual Studio Add-in (Extensibility) Project</title><content type="html">A while back I had to write an add-in to Microsoft Office 2003 for a client and ran into numerous issues during both the development and the deployment of the add-in. Thought I should post it here in hopes that someone may find it useful.&lt;br /&gt;
&lt;br /&gt;
I use Visual Studio 2005 Standard (I know, I know Visual Studio 2008 is out but I develop Pro/Toolkit and SolidWorks API applications too and am not sure if the upgrade is a simple recompile and link, so have not upgraded.), so in order to develop Microsoft Office 2003 Add-ins I had two options:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Use the Visual Studio Add-in Template under the "Extensibility" Project Type.&lt;/li&gt;
&lt;li&gt;Use Visual Studio 2005 Tools for Microsoft Office 2003 (VSTO)&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;There is a good comparison of these two choices at &lt;a href="http://www.codeproject.com/KB/macros/wordaddindesign.aspx"&gt;CodeProject&lt;/a&gt;. I have a few additional points to note here that may influence your choice:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Using Visual Studio Add-in Template&lt;/li&gt;

&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;DEVELOPMENT&lt;/span&gt;: Writing code for the add-in gets very clunky. The following is a sample excerpt:&lt;br /&gt;
using Microsoft.Office.Core;&lt;br /&gt;
using nsWord = Microsoft.Office.Interop.Word;&lt;br /&gt;
&lt;br /&gt;
nsWord.ApplicationClass office_app;&lt;br /&gt;
&lt;br /&gt;
public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; applicationObject = application;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; addInInstance = addInInst;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (connectMode != Extensibility.ext_ConnectMode.ext_cm_Startup)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OnStartupComplete(ref custom);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// which office app is "application"&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (application is nsWord.Application)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; office_app = (nsWord.ApplicationClass)application;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //if (logger.IsInfoEnabled) { logger.Info("host app is Word"); }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
As can be seen from the last few lines, to determine the Office Application that the add-in is loaded in is an equivalence test (using if-else or switch-case or some similar). I know this is not a good solution, but I don't have anything better (if someone has a better suggestion I would really appreciate the tip.&lt;br /&gt;
&lt;br /&gt;
Even if I got beyond that I am still casting the 'object application' to 'Microsoft.Office.Interop.Word'. I guess I could have used inheritance to pass 'application' to a sub-class that would deal with the specific Office Application, but I was surprised to find that you could not simply query for the Office App Type.&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: large;"&gt;DEPLOYMENT&lt;/span&gt;: Deploying the Shared Add-in requires a bunch of updates from Microsoft that have to be applied to the target PC:&lt;/li&gt;

&lt;ul&gt;&lt;li&gt;Microsoft .NET Framework (I personally installed 2.0 though latest versions should also work)&lt;/li&gt;
&lt;li&gt;KB 908002 (&lt;a href="http://support.microsoft.com/kb/908002" target="_blank"&gt;http://support.microsoft.com/&lt;wbr&gt;&lt;/wbr&gt;kb/908002&lt;/a&gt;) - Download and execute the EXE file. The EXE download actually contains 3 files all of which has to be applied to the target system in the following order: &lt;/li&gt;

&lt;ol&gt;&lt;ol&gt;&lt;li&gt;lockbackRegKey.msi&lt;/li&gt;
&lt;li&gt;office2003-kb907417sfxcab-ENU.&lt;wbr&gt;&lt;/wbr&gt;exe&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;extensibilityMSM.msi&lt;/li&gt;
&lt;/ol&gt;&lt;/ol&gt;
&lt;li&gt;Office 2003 Primary Interop Assemblies (&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=3C9A983A-AC14-4125-8BA0-D36D67E0F4AD&amp;amp;displaylang=en" target="_blank"&gt;http://www.microsoft.com/&lt;wbr&gt;&lt;/wbr&gt;downloads/details.aspx?&lt;wbr&gt;&lt;/wbr&gt;FamilyId=3C9A983A-AC14-4125-&lt;wbr&gt;&lt;/wbr&gt;8BA0-D36D67E0F4AD&amp;amp;displaylang=&lt;wbr&gt;&lt;/wbr&gt;en&lt;/a&gt;) - The download (an EXE file) contains an MSI file that has to be run on target system.&lt;br /&gt;
&lt;br /&gt;
As far as I can tell KB 908002 and the Office 2003 Primary Interop Assemblies cannot be uninstalled.&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;I have not had a chance to write code with VSTO, but considering that it was designed for such applications, I am assuming that you will not have most of the weirdness stated here. If you have Visual Studio 2005 Professional, then you can download &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8315654b-a5ae-4108-b7fc-186402563f2b&amp;amp;DisplayLang=en"&gt;VSTO here&lt;/a&gt; [3]. You can search on Microsoft's Download center for respective versions of VSTO for VS 2008 (for Microsoft Office 2003/2007).&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Acknowledgements:&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://social.msdn.microsoft.com/forums/en-US/vsto/thread/10c10162-4841-4b46-9d54-67adfecbf622/"&gt;http://social.msdn.microsoft.com/forums/en-US/vsto/thread/10c10162-4841-4b46-9d54-67adfecbf622/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/kh3965hw%28VS.80%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/kh3965hw(VS.80).aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8315654b-a5ae-4108-b7fc-186402563f2b&amp;amp;DisplayLang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=8315654b-a5ae-4108-b7fc-186402563f2b&amp;amp;DisplayLang=en&lt;br /&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7274961-5741566434338899317?l=ossandcad.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MPA6GB7qe_tJffHANUP-bHwFzCI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MPA6GB7qe_tJffHANUP-bHwFzCI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MPA6GB7qe_tJffHANUP-bHwFzCI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MPA6GB7qe_tJffHANUP-bHwFzCI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=2KQ1s2SQ"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?i=2KQ1s2SQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=tbOK7TFf"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=Y2pos8Lw"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ossandcad/~4/M5NWWSGH86k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ossandcad.blogspot.com/feeds/5741566434338899317/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ossandcad.blogspot.com/2008/10/office-2003-addin-using-visual-studio.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/5741566434338899317?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/5741566434338899317?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ossandcad/~3/M5NWWSGH86k/office-2003-addin-using-visual-studio.html" title="Office 2003 Addin using Visual Studio Add-in (Extensibility) Project" /><author><name>Ganeshram Iyer</name><uri>http://www.blogger.com/profile/09189272659983924981</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="15240405801582043438" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://ossandcad.blogspot.com/2008/10/office-2003-addin-using-visual-studio.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcMRn85cCp7ImA9WxRSF0s.&quot;"><id>tag:blogger.com,1999:blog-7274961.post-1977515834723206201</id><published>2008-09-18T12:16:00.004-05:00</published><updated>2008-09-18T12:48:07.128-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-18T12:48:07.128-05:00</app:edited><title>License needed to run my Pro/Toolkit add-ins</title><content type="html">I received a comment on an older post of mine &lt;a href="http://ossandcad.blogspot.com/2008/03/howto-example-protoolkit-application.html"&gt;HOWTO: Example Pro/Toolkit Application using Visual Studio 2005&lt;/a&gt; from Hans who mentioned that he was unable to run my Pro/Toolkit add-in that was attached with that post. (For convenience the following is the same attachment)&lt;br /&gt;
&lt;br /&gt;
&lt;embed height="225" src="http://www.box.net/static/flash/box_explorer.swf?widgetHash=xvzvctm88c" type="application/x-shockwave-flash" width="400" wmode="transparent" /&gt;&lt;br /&gt;
&lt;br /&gt;
The specific error he received was:&lt;br /&gt;
&lt;blockquote&gt;The Pro/TOOLKIT application "ProE_Proj" was not unlocked before distribution to your site.&lt;br /&gt;
Please contact the provider of "ProE_Proj" for assistance.&lt;/blockquote&gt;This error is the result of a lack of a Pro/Toolkit license on the PC on which you are deploying my add-in.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Reason for Error&lt;/span&gt; &lt;br /&gt;
I intended this blog for developers of Pro/Toolkit, SolidWorks and other CAD API applications. So the assumption I make is the availability of the required developer license on the PC where these applications are to be developed. The Visual Studio project and source code that I post are not intended for deployment on end-user PC. I do not pay for a Pro/Engineer or Pro/Toolkit license myself. So do not have the rights to distribute the binary executable code (either DLL or EXE). In order to use my add-ins on an end-user PC you will need to have a Pro/Toolkit or SolidWorks license, as applicable.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Solution&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;To deploy a Pro/Toolkit add-in (e.g. to deploy my ProE_Proj on a PC without Pro/Toolkit license) follow these steps:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;From a development workstation which has Pro/Toolkit license execute the following command:&lt;/li&gt;
&lt;/ul&gt;&lt;blockquote&gt;C:\Program Files\proeWildfire 3.0\i486_nt\obj\protk_unlock.exe 'one or more pro/toolkit dll or exe names '&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;Once unlocked you can deploy the add-in to end-user PC without them needing Pro/Toolkit license on their PC. To learn how to write installers to deploy your add-in, refer to my last post &lt;a href="http://ossandcad.blogspot.com/2008/07/protoolkit-add-in-registration.html"&gt;Pro/Toolkit Add-in registration&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;&lt;span style="font-size: large;"&gt;Still problems? &lt;/span&gt;&lt;br /&gt;
If you are still having problems with development or deployment of the Pro/Toolkit add-in, then post a comment and I will respond with a solution if I have one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7274961-1977515834723206201?l=ossandcad.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6Id4xyJsgbvl_qjCpvAElQzwImQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6Id4xyJsgbvl_qjCpvAElQzwImQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6Id4xyJsgbvl_qjCpvAElQzwImQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6Id4xyJsgbvl_qjCpvAElQzwImQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=PXcVEloa"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?i=PXcVEloa" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=5hCiHG1v"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=Nal1kZko"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ossandcad/~4/L1HenMA_Dcc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ossandcad.blogspot.com/feeds/1977515834723206201/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ossandcad.blogspot.com/2008/09/license-needed-to-run-my-protoolkit-add.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/1977515834723206201?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/1977515834723206201?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ossandcad/~3/L1HenMA_Dcc/license-needed-to-run-my-protoolkit-add.html" title="License needed to run my Pro/Toolkit add-ins" /><author><name>Ganeshram Iyer</name><uri>http://www.blogger.com/profile/09189272659983924981</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="15240405801582043438" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://ossandcad.blogspot.com/2008/09/license-needed-to-run-my-protoolkit-add.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUNSHo5eCp7ImA9WxRTGUQ.&quot;"><id>tag:blogger.com,1999:blog-7274961.post-8886122357368898864</id><published>2008-09-08T23:25:00.000-05:00</published><updated>2008-09-09T14:58:19.420-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-09T14:58:19.420-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="proengineer" /><category scheme="http://www.blogger.com/atom/ns#" term="pro toolkit" /><category scheme="http://www.blogger.com/atom/ns#" term="protoolkit" /><title>Pro/Toolkit Add-in registration</title><content type="html">In one of my previous posts &lt;a href="http://ossandcad.blogspot.com/2008/03/howto-example-protoolkit-application.html"&gt;HOWTO: Example Pro/Toolkit Application using Visual Studio 2005&lt;/a&gt; I described how to create &lt;b&gt;protk.dat&lt;/b&gt; files necessary to enable Pro/Engineer to discover your Pro/Toolkit add-ins. In that post the protk.dat file was placed in the same path as your executable. This simplified your development and debugging process.&lt;br /&gt;
&lt;br /&gt;
But once you are done with all development and want to package your add-in for delivery to the customer you can leave the protk.dat in the same location as your add-in unless you plan to put your executable in the Pro/Engineer directory - which is the worst thing you can do.&lt;br /&gt;
&lt;br /&gt;
So where should you put your protk.dat file? Well the tkuse.pdf (found under &lt;b&gt;C:\Program Files\proeWildfire 3.0\protoolkit&lt;/b&gt;) gives the following advice to Pro/Toolkit developers.&lt;br /&gt;
&lt;blockquote&gt;&lt;i&gt;Pro/ENGINEER searches for the registry file as follows:&lt;/i&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;i&gt;In the absolute path specified in the “PROTKDAT”, “PRODEVDAT”, and “TOOLKIT_REGISTRY_FILE” statements in the Pro/ENGINEER configuration file.&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;For the files named protk.dat or prodev.dat in the following locations:&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;&lt;li&gt;&lt;i&gt;Current directory&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;pro engineer=""&gt;&amp;lt; Pro/ENGINEER &amp;gt;&lt;machine&gt;/&amp;lt; MACHINE &amp;gt;text&lt;/machine&gt;&lt;/pro&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;pro engineer=""&gt;&amp;lt; Pro/ENGINEER &amp;gt;/text&lt;/pro&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;i&gt;In the preceeding locations, the variables are as follows:&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;i&gt;&lt;pro engineer=""&gt;&amp;lt; Pro/ENGINEER &amp;gt;—The Pro/ENGINEER loadpoint (not the Pro/TOOLKIT loadpoint).&lt;/pro&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;machine&gt;&amp;lt; MACHINE &amp;gt;—The machine-specific subdirectory (such as sgi_elf2 or i486_nt).&lt;/machine&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;i&gt;If more than one registry file having the same filename exists in this search path, Pro/ENGINEER stops searching after finding the first instance of the file and starts all the Pro/TOOLKIT applications specified in it. If more than one registry file having different filenames exist in this search path, Pro/ENGINEER stops searching after finding one instance of each of them and starts all the Pro/TOOLKIT applications specified in them.&lt;br /&gt;
Note:&lt;/i&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;i&gt;Option 1 is normally used during development, because the Pro/TOOLKIT application is seen only if you start Pro/ENGINEER from the specific directory that contains the registry file.&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;i&gt;Option 3 is recommended when making an end-user installation, because it makes sure that the registry file is found no matter what directory is used to start Pro/ENGINEER.&lt;/i&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;h3 class="post-title"&gt;&lt;/h3&gt;So according to PTC we should put our protk.dat files in the &amp;lt; Pro/ENGINEER &amp;gt;\text folder which is typically &lt;b&gt;C:\Program Files\proeWildfire 3.0\text&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-large;"&gt;Be careful&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;Do not overwrite&lt;/b&gt; the protk.dat file in the &amp;lt; Pro/Engineer &amp;gt;\text folder as other add-ins may have appended their protk.dat registry file into that file. &lt;b&gt;Append &lt;/b&gt;your protk.dat to the protk.dat file in the &lt;i&gt;&amp;lt; Pro/ENGINEER &amp;gt;/text&lt;/i&gt; folder. Also &lt;b&gt;when uninstalling take care to not delete the protk.dat files&lt;/b&gt;, as that would disable other add-ins. Simply delete the lines in that protk.dat file that you wrote during installation of your add-in. NOTE: Do not just make a copy of the protk.dat in&amp;lt; Pro/ENGINEER &amp;gt;\text folder to a temporary location during installation and then replace it when uninstalling your application. This will disable Pro/Toolkit applications installed after your own.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-large;"&gt;So what should be done and How to do this?&lt;/span&gt; &lt;br /&gt;
To summarize we need to achieve the following to register and deregister the Pro/Toolkit addin with Pro/Engineer upon installation and uninstallation respectively:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;On install append the add-ins registration information to the protk.dat file in &amp;lt; Pro/ENGINEER &amp;gt;\text&lt;/li&gt;
&lt;li&gt;On uninstall delete the lines of text we appended to the protk.dat file in &amp;lt; Pro/ENGINEER &amp;gt;\text&lt;/li&gt;
&lt;/ol&gt;I personally use the &lt;a href="http://nsis.sourceforge.net/"&gt;NSIS scriptable install&lt;/a&gt; to create Pro/Toolkit applications. NSIS is an open source system to create Windows installers. If you use NSIS then the following tips should help you to address the above requirements.&lt;br /&gt;
&lt;ul&gt;&lt;ul&gt;&lt;li&gt;INSTALLATION:&lt;/li&gt;

&lt;ul&gt;&lt;li&gt;Create a section, named something like "AppendProTKDAT".&lt;/li&gt;
&lt;li&gt;Call FileOpen in "append" mode&lt;/li&gt;
&lt;li&gt;Call FileSeek with "offset" at "0" with "END" mode - This is very important, since FileOpen always positions the file's cursor at the beginning of the file. We want to append our protk.dat registry lines to the end of the file - So basically call after FileOpen&lt;br /&gt;
&lt;b&gt;FileSeek $0 0 END&lt;/b&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Call FileWrite repeatedly to write the various lines&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileWriteByte ${FilePathName} "13"&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileWriteByte ${FilePathName} "10"&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Carriage Return / Line Feed&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileWriteByte ${FilePathName} "13"&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileWriteByte ${FilePathName} "10"&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileWrite ${FilePathName} "NAME&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ${name_of_prod}"&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Call FileClose &lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;UNINSTALL&lt;/li&gt;

&lt;ul&gt;&lt;li&gt; To delete the lines of text we appended to the protk.dat file call RemoveAfterLine as specified in the following &lt;a href="http://nsis.sourceforge.net/Delete_lines_from_one_line_to_another_line_inclusive"&gt;NSIS Function&lt;/a&gt; (note: this is a user contributed Function).&lt;/li&gt;
&lt;li&gt;So in my case I called it as follows (the $\r$\n is for "new line"):&lt;br /&gt;
&lt;b&gt;Push "NAME&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ${PRODUCT_NAME}$\r$\n" ;(here ${PRODUCT_NAME} is something I have defined at the beginning of the script to be the name of my product, as written to the protk.dat)&lt;br /&gt;
Push "END$\r$\n"&lt;br /&gt;
Call un.RemoveAfterLine&lt;/b&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;span style="font-size: x-large;"&gt;A Few Gotchas&lt;/span&gt;&lt;br /&gt;
While creating the installer with NSIS I ran into a weird problem. During install/uninstall with the NSIS-created installer, the protk.dat file would get appended to properly but for some reason the permissions on the file would change from "readable by Users" to "readable by Administrator only". Since I could not find a fix or a mention for this on NSIS' website I fixed it as follows:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;On Windows XP (and possibly other Windows OS too) call "CACLS.EXE" as follows during install and uninstall - &lt;br /&gt;
&lt;b&gt;ExecWait '"$SYSDIR\cmd.exe" /C echo Y|$SYSDIR\cacls.exe "${PROTKDAT_INSTALL_DIR}" /G everyone:R administrators:f' $0&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;The &lt;b&gt;"echo"&lt;/b&gt; part is required since CACLS.EXE requires user input at the command prompt for a &lt;b&gt;"Y" &lt;/b&gt;or an &lt;b&gt;"N"&lt;/b&gt;. So with the "echo" we are simply replicating that behavior.&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;span style="font-size: large;"&gt;Comments?&lt;/span&gt; &lt;br /&gt;
I am not attaching the source code directly, as I have not found a generic way to present my NSIS code without making it very application specific. If the sample stuff I have posted above is not enough, leave a comment for me and I will post whatever you need after stripping application-specific strings and code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7274961-8886122357368898864?l=ossandcad.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Bu8B7XsB34I0hVybngDgskMMXxg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Bu8B7XsB34I0hVybngDgskMMXxg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Bu8B7XsB34I0hVybngDgskMMXxg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Bu8B7XsB34I0hVybngDgskMMXxg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=MWECJf4z"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?i=MWECJf4z" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=Q6Prf689"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=rDThGh9R"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ossandcad/~4/AvtHnFaj6bE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ossandcad.blogspot.com/feeds/8886122357368898864/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ossandcad.blogspot.com/2008/07/protoolkit-add-in-registration.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/8886122357368898864?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/8886122357368898864?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ossandcad/~3/AvtHnFaj6bE/protoolkit-add-in-registration.html" title="Pro/Toolkit Add-in registration" /><author><name>Ganeshram Iyer</name><uri>http://www.blogger.com/profile/09189272659983924981</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="15240405801582043438" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://ossandcad.blogspot.com/2008/07/protoolkit-add-in-registration.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AMQXwzeCp7ImA9WxZaGUQ.&quot;"><id>tag:blogger.com,1999:blog-7274961.post-2653459868710556718</id><published>2008-05-05T10:03:00.001-05:00</published><updated>2008-05-05T10:03:00.280-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-05T10:03:00.280-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="api" /><category scheme="http://www.blogger.com/atom/ns#" term="proengineer" /><category scheme="http://www.blogger.com/atom/ns#" term="pro toolkit" /><category scheme="http://www.blogger.com/atom/ns#" term="solidworks" /><category scheme="http://www.blogger.com/atom/ns#" term="protoolkit" /><title>Pro/Toolkit, SolidWorks API Development Tools (C++ Episode)</title><content type="html">&lt;span style="font-size:100%;"&gt;Continuing the topic I started discussing in my &lt;a href="http://ossandcad.blogspot.com/2008/04/protoolkit-solidworks-api-development.html"&gt;last post&lt;/a&gt; with Visual C++ and Pro/Toolkit development tools.&lt;br /&gt;&lt;br /&gt;Remember you can use &lt;a href="http://tortoisesvn.net/"&gt;TortoiseSVN&lt;/a&gt; with any file type (does better with text, since merging is possible with text files), so I don't mention it separately here.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;Visual C++&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Logging Tools:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://pantheios.sourceforge.net/"&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Pantheios&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Logging in Visual C++ is unfortunately not the easiest tool to find. There are many that pop up e.g. &lt;a href="http://log4cpp.sourceforge.net/"&gt;Log4Cpp&lt;/a&gt;, &lt;a href="http://log4cplus.sourceforge.net/index.html"&gt;Log4Cplus&lt;/a&gt;, &lt;a href="http://logging.apache.org/log4cxx/"&gt;log4cxx&lt;/a&gt; etc. but I was not able to build any of these successfully. So I finally turned to &lt;a href="http://pantheios.sourceforge.net/"&gt;Pantheios&lt;/a&gt; and found it as easy to use as NLog though the configuration is quite different and is not done through configuration files like NLog. You have to build the Pantheios libraries yourself, so don't forget to refer to the &lt;a href="http://pantheios.sourceforge.net/tutorials_library_selector.html"&gt;Pantheios Library Selector Tool&lt;/a&gt; to make sure you use the right libraries with your code.&lt;br /&gt;&lt;br /&gt;Now keep in mind that Pantheios describes itself as a logging API rather than a logging tool meaning it does not have the choice of targets that NLog provides (of course there is no NLog for pure C++, only in mixed managed/native mode). So Pantheios allows you to write to files on your hard disk and thats it. For more target choices you need to add one of the previously mentioned logging tools (viz. log4cpp, log4cplus or log4cxx) into the mix. But I have found no need to do so. I use the stock back and front ends that come with Pantheios and write my log messages to a file on the hard disk.&lt;br /&gt;&lt;br /&gt;Pantheios uses a BSD-style license.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Testing Tools&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;a href="http://cppunit.sourceforge.net/cppunit-wiki"&gt;CppUnit&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;CppUnit is probably the most well known unit testing frameworks available for C++. CppUnit is licensed under the &lt;a href="http://moinmo.in/GPL"&gt;GPL&lt;/a&gt;. I have found it easy to setup and use even though you need a few macro statements to write even an empty unit test. For a &lt;a href="http://www.gamesfromwithin.com/articles/0412/000061.html"&gt;thorough review of the unit tests&lt;/a&gt; available I refer you to a post by &lt;a href="http://www.gamesfromwithin.com/"&gt;Noel Llopis&lt;/a&gt; posted a few years ago (2004) but still very relevant. After reading Noel's post I stuck with CppUnit as it offers most C++-like experience which most developers programming Pro/Toolkit are comfortable with, though I would love to have some time to study Boost.Test since I love the &lt;a href="http://www.boost.org/"&gt;Boost libraries&lt;/a&gt;.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;a href="http://ceefit.woldrich.com/?page=Home"&gt;CeeFIT&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;I mentioned &lt;a href="http://fit.c2.com/"&gt;FIT&lt;/a&gt; with my &lt;a href="http://ossandcad.blogspot.com/2008/04/protoolkit-solidworks-api-development.html"&gt;last post&lt;/a&gt; and &lt;a href="http://ceefit.woldrich.com/?page=Home"&gt;CeeFIT&lt;/a&gt; is the C++ implementation of FIT. The following is just an excerpt from my previous post and is just as relevant in this section:&lt;br /&gt;&lt;blockquote&gt;FIT stands for "&lt;span style="font-weight: bold;"&gt;F&lt;/span&gt;ramework for &lt;span style="font-weight: bold;"&gt;I&lt;/span&gt;ntegrated &lt;span style="font-weight: bold;"&gt;T&lt;/span&gt;est" and enables developers to place the input data in HTML tables so that it is easy to read (both by Human users and software) and outputs the resulting data back in that same HTML table (with a different file name if you prefer) with colored markup so that it is easy to tell which test passed and which did not. FIT is described as a collaboration tool and I have successfully used it as such, by using those HTML files to contain complete descriptions of functionality of the application being developed and to show current status of development. Make sure you &lt;a href="http://fit.c2.com/wiki.cgi?DownloadNow"&gt;download&lt;/a&gt; the right version of the FIT libraries as it comes in various flavors e.g. &lt;a href="http://prdownloads.sourceforge.net/fit/fit-java-1.1.zip?download"&gt;Java&lt;/a&gt;, &lt;a href="http://ceefit.woldrich.com/index.jsp?page=Download"&gt;C++&lt;/a&gt;, .&lt;a href="http://prdownloads.sourceforge.net/fit/fit-dotnet-1.1.zip?download"&gt;NET&lt;/a&gt; etc.&lt;br /&gt;&lt;br /&gt;I am unaware of other integrated test tools that are as simple to use as FIT and are Open Source or at the very least free to download and use for personal applications. If you know of any please let me know.&lt;/blockquote&gt;&lt;span style="font-size:130%;"&gt;Database&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.codeproject.com/KB/database/CppSQLite.aspx"&gt;&lt;span style="font-weight: bold;"&gt;SQLite&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;I mentioned &lt;a href="http://www.sqlite.org/"&gt;SQLite&lt;/a&gt; also in my last post as an excellent, completely free and easy to use database engine. To use SQLite with C++ you need to use a wrapper and many are listed at &lt;a href="http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers"&gt;SQLite's wrapper page&lt;/a&gt;. I have personally used &lt;a href="http://www.codeproject.com/KB/database/CppSQLite.aspx"&gt;CppSQLite&lt;/a&gt; hosted on &lt;a href="http://www.codeproject.com/"&gt;CodeProject&lt;/a&gt; and found it really easy to work with.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;NOTE on Using CppUnit and CeeFIT with Pro/Toolkit applications&lt;/span&gt;&lt;br /&gt;Keep in mind that using CppUnit with Pro/Toolkit applications would require you to run &lt;a href="http://ossandcad.blogspot.com/2008/04/batch-mode-proengineer.html"&gt;Pro/Engineer in batch mode&lt;/a&gt;, which I would definitely advise against as that would slow down your build process and does not quite fit in the realm of unit tests. So you are better off writing functional or integrated tests for your Pro/Toolkit applications.&lt;br /&gt;&lt;br /&gt;To write integrated tests for your Pro/Toolkit application using CeeFIT remain tuned in to my blog. I am working on a workspace that will let you do just that and will post the code if and when I am successful.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Comments or suggestions?&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7274961-2653459868710556718?l=ossandcad.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EcNf_H6mO6irsOU0eVdLVaIrlSk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EcNf_H6mO6irsOU0eVdLVaIrlSk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EcNf_H6mO6irsOU0eVdLVaIrlSk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EcNf_H6mO6irsOU0eVdLVaIrlSk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=PNyTMmJz"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?i=PNyTMmJz" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=dj2Ble5x"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=tHN4OGN2"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ossandcad/~4/KKgtTEXc4hY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ossandcad.blogspot.com/feeds/2653459868710556718/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ossandcad.blogspot.com/2008/05/protoolkit-solidworks-api-development.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/2653459868710556718?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/2653459868710556718?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ossandcad/~3/KKgtTEXc4hY/protoolkit-solidworks-api-development.html" title="Pro/Toolkit, SolidWorks API Development Tools (C++ Episode)" /><author><name>Ganeshram Iyer</name><uri>http://www.blogger.com/profile/09189272659983924981</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="15240405801582043438" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://ossandcad.blogspot.com/2008/05/protoolkit-solidworks-api-development.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcFQHk4eSp7ImA9WxZaF0s.&quot;"><id>tag:blogger.com,1999:blog-7274961.post-3694135624054511243</id><published>2008-05-02T17:15:00.000-05:00</published><updated>2008-05-02T16:16:51.731-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-02T16:16:51.731-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="api" /><category scheme="http://www.blogger.com/atom/ns#" term="proengineer" /><category scheme="http://www.blogger.com/atom/ns#" term="pro toolkit" /><category scheme="http://www.blogger.com/atom/ns#" term="solidworks" /><category scheme="http://www.blogger.com/atom/ns#" term="protoolkit" /><title>Pro/Toolkit, SolidWorks API Development Tools (C# Episode)</title><content type="html">I follow CAD related blogs often and happened to come by the following &lt;a href="http://extensiblecad.com/words/2007/12/17/development-tools/"&gt;interesting post&lt;/a&gt; at &lt;a href="http://extensiblecad.com/"&gt;http://ExtensibleCAD.com&lt;/a&gt;. As someone who develops SolidWorks API-based (and Pro/Toolkit) applications I thought I could post a similar list of tools that I use in my applications but have the advantage of being &lt;a href="http://en.wikipedia.org/wiki/Open_source"&gt;Open Source&lt;/a&gt; so that they are available to all with little restriction and that too on Microsoft Windows.&lt;br /&gt;&lt;br /&gt;I develop with both Visual C# and Visual C++ and break down the tools based on the language and the CAD system they can be used with. If you develop for SolidWorks then you can use either Visual C# or Visual C++ (although SolidWorks is pushing C# more than C++). On the other hand with Pro/Toolkit you are somewhat stuck with C++.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;Visual C#&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Logging Tools:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.nlog-project.org/"&gt;&lt;span style="font-weight: bold;"&gt;NLog&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Every good programmer needs a good logging tool. I suggest using &lt;a href="http://www.nlog-project.org/"&gt;NLog&lt;/a&gt;. This has to be the simplest logging tool ever. I tried to use &lt;a href="http://logging.apache.org/log4net/"&gt;log4net&lt;/a&gt; by Apache but to be honest it has a learning curve that I did not have time for. The best part of NLog is that by simply modifying a configuration file, you can turn off logging completely without a single change to your source code. (I am sure log4net also allows this or something equally simple). NLog is distributed under the &lt;a href="http://svn.nlog-project.org/repos/nlog/trunk/NLog/LICENSE.txt"&gt;BSD license&lt;/a&gt;. If for some reason you don't like NLog or log4net then &lt;a href="http://csharp-source.net/open-source/logging"&gt;there are others&lt;/a&gt; you can take a stab at.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Testing Tools:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.nunit.org/"&gt;&lt;span style="font-weight: bold;"&gt;NUnit&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;Who in this day and age writes code without at least a unit test framework that runs as part of your build process? (not me). Well fortunately NUnit is really easy to use and has a license based on &lt;a href="http://www.nunit.org/index.php?p=license&amp;amp;r=2.4.7"&gt;zlib &lt;/a&gt;which allows commercial use.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;There are other unit test frameworks if you are unsatisfied with NUnit (some people are) e.g. &lt;a href="http://www.codeplex.com/xunit"&gt;xUnit.net&lt;/a&gt;, &lt;a href="http://www.mbunit.com/"&gt;MbUnit&lt;/a&gt; etc. I have heard great things about MbUnit especially how extensible it is but personally NUnit does the job for me so have not let my eye wander.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://fit.c2.com/"&gt;&lt;span style="font-weight: bold;"&gt;FIT&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;FIT stands for "&lt;span style="font-weight: bold;"&gt;F&lt;/span&gt;ramework for &lt;span style="font-weight: bold;"&gt;I&lt;/span&gt;ntegrated &lt;span style="font-weight: bold;"&gt;T&lt;/span&gt;est" and enables developers to place the input data in HTML tables so that it is easy to read (both by Human users and software) and outputs the resulting data back in that same HTML table (with a different file name if you prefer) with colored markup so that it is easy to tell which test passed and which did not. FIT is described as a collaboration tool and I have successfully used it as such, by using those HTML files to contain complete descriptions of functionality of the application being developed and to show current status of development. Make sure you &lt;a href="http://fit.c2.com/wiki.cgi?DownloadNow"&gt;download&lt;/a&gt; the right version of the FIT libraries as it comes in various flavors e.g. &lt;a href="http://prdownloads.sourceforge.net/fit/fit-java-1.1.zip?download"&gt;Java&lt;/a&gt;, &lt;a href="http://ceefit.woldrich.com/index.jsp?page=Download"&gt;C++&lt;/a&gt;, .&lt;a href="http://prdownloads.sourceforge.net/fit/fit-dotnet-1.1.zip?download"&gt;NET&lt;/a&gt; etc.&lt;br /&gt;&lt;br /&gt;I am unaware of other integrated test tools that are as simple to use as FIT and are Open Source or at the very least free to download and use for personal applications. If you know of any please let me know.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Database&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;&lt;a href="http://sqlite.phxsoftware.com/"&gt;SQLite for .NET&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Most developers have heard of &lt;a href="http://www.sqlite.org/"&gt;SQLite&lt;/a&gt;, which is an excellent self-contained database engine. The SQLite code has been dedicated to public domain, so it is free for all uses and does not come in &lt;a href="http://www.microsoft.com/sql/prodinfo/features/compare-features.mspx"&gt;multiple flavors&lt;/a&gt; like SQL Server Express. Everything SQLite has to offer you get free and no installation is needed. To use SQLite with .NET I suggest using &lt;a href="http://sqlite.phxsoftware.com/"&gt;System.Data.SQLite&lt;/a&gt; which has a .NET provider to manipulate SQLite databases. System.Data.SQLite too sits in public domain.&lt;/span&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;Language Independent&lt;/span&gt;&lt;br /&gt;&lt;a href="http://tortoisesvn.net/"&gt;TortoiseSVN&lt;/a&gt;&lt;br /&gt;This is a must have tool for all developers at least for those who use Microsoft Windows and don't already use some other version control system.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;NOTE on Unit Testing and CAD API&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Keep in mind that if you want to test functions that call SolidWorks API then you need to run &lt;a href="http://ossandcad.blogspot.com/2008/04/batch-mode-solidworks.html"&gt;SolidWorks in batch mode&lt;/a&gt; if you want it to work. I personally do not suggest unit testing functions that call SolidWorks API as it would slow down the build (referring to local build on developers' machine and not build server) process and in my opinion is not what unit testing is intended to be. Additionally the unit tests would not know how to handle calls to SolidWorks API (if SolidWorks is not running and/or you are not connected to a SolidWorks instance). The idea of &lt;a href="http://www.nmock.org/"&gt;mock objects&lt;/a&gt; may work but that is beyond the scope of this post and may require the CAD-API developer to get quite involved.&lt;br /&gt;&lt;br /&gt;Instead I would suggest using a functional test framework or even integrated test framework for testing functions that call SolidWorks API. Since most of the time the function or integrated test frameworks do not run as part of the local build (perhaps as part of build server), you could run such tests on functions or your system even if they call SolidWorks API.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="font-weight: bold;"&gt;Comments?&lt;/span&gt;&lt;br /&gt;Development Tools that I use with Visual C++ and Pro/Toolkit is coming with my next post. Do leave me a comment if you have a tool that you prefer.&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7274961-3694135624054511243?l=ossandcad.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LDs3dt7qa96VGB5mDGSBHJauelU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LDs3dt7qa96VGB5mDGSBHJauelU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LDs3dt7qa96VGB5mDGSBHJauelU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LDs3dt7qa96VGB5mDGSBHJauelU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=9AKUzPgO"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?i=9AKUzPgO" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=1OLJI4LG"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=GmAk1PNT"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ossandcad/~4/w_t4jnxbP6M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ossandcad.blogspot.com/feeds/3694135624054511243/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ossandcad.blogspot.com/2008/04/protoolkit-solidworks-api-development.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/3694135624054511243?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/3694135624054511243?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ossandcad/~3/w_t4jnxbP6M/protoolkit-solidworks-api-development.html" title="Pro/Toolkit, SolidWorks API Development Tools (C# Episode)" /><author><name>Ganeshram Iyer</name><uri>http://www.blogger.com/profile/09189272659983924981</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="15240405801582043438" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://ossandcad.blogspot.com/2008/04/protoolkit-solidworks-api-development.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEAQXoyfip7ImA9WxJaE08.&quot;"><id>tag:blogger.com,1999:blog-7274961.post-6359410516564459314</id><published>2008-04-10T11:04:00.049-05:00</published><updated>2009-08-03T13:20:40.496-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-03T13:20:40.496-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="visual studio" /><category scheme="http://www.blogger.com/atom/ns#" term="cad" /><category scheme="http://www.blogger.com/atom/ns#" term="example" /><category scheme="http://www.blogger.com/atom/ns#" term="batch" /><category scheme="http://www.blogger.com/atom/ns#" term="solidworks" /><title>Batch mode SolidWorks</title><content type="html">I saw a &lt;a href="http://groups.google.com/group/SolidWorks-API/browse_frm/thread/6cbb2b92ebd4780f/74bc011e090679c3?tvc=1&amp;amp;q=open+silent#74bc011e090679c3"&gt;post on Google Groups&lt;/a&gt; where a user had posted a question (2 years ago) asking how one could open SolidWorks silently viz. no GUI and use SolidWorks APIs to open a part but there was no answer that I could find right of.&lt;br /&gt;
&lt;br /&gt;
In the same vein as my previous post titled "&lt;a href="http://ossandcad.blogspot.com/2008/04/batch-mode-proengineer.html"&gt;Batch mode Pro/Engineer&lt;/a&gt;" I tried to create a similar workspace for SolidWorks that executes SolidWorks with no GUI but still uses the SolidWorks API to load and query parts or assemblies. Fortunately SolidWorks API makes it much easier to do this as compared to Pro/Toolkit. After a little experimentation I came up with the following solution. The solution was created in Visual Studio 2005 using Visual C++. Click on the following zip file to download the solution.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://ossandcad.googlecode.com/files/swbatch.zip"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5356961053423348338" src="http://2.bp.blogspot.com/_Ac0gUZe6XLk/Sle_shjmqnI/AAAAAAAAAfQ/lob5roUfKbk/s320/zip.jpg" style="cursor: pointer; float: left; height: 116px; margin: 0pt 10px 10px 0pt; width: 116px;" /&gt;&lt;br /&gt;
http://ossandcad.googlecode.com/files/swbatch.zip&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you prefer to download from the source, you can do so using the following link with your SVN client (e.g. &lt;a href="http://tortoisesvn.net/downloads"&gt;TortoiseSVN&lt;/a&gt; (follow the instructions at &lt;a href="http://code.google.com/p/ossandcad/source/checkout"&gt;http://code.google.com/p/ossandcad/source/checkout&lt;/a&gt;)):&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_Ac0gUZe6XLk/Slfi_rOrYRI/AAAAAAAAAfw/9JSFcfQ5VLI/s1600-h/subversion_logo-200x173.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_Ac0gUZe6XLk/Slfi_rOrYRI/AAAAAAAAAfw/9JSFcfQ5VLI/s200/subversion_logo-200x173.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="https://ossandcad.googlecode.com/svn/trunk/swbatch"&gt;&lt;br /&gt;
https://ossandcad.googlecode.com/svn/trunk/swbatch&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: 130%;"&gt;Setup of Solution&lt;br /&gt;
&lt;/span&gt;Simply create a new "Win32 Console Application" project in Visual Studio 2005.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/_Ac0gUZe6XLk/R_8BW6WGlyI/AAAAAAAAAE8/tvrw5YKYziE/s1600-h/win32-console-app.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5187866788884813602" src="http://3.bp.blogspot.com/_Ac0gUZe6XLk/R_8BW6WGlyI/AAAAAAAAAE8/tvrw5YKYziE/s320/win32-console-app.png" style="cursor: pointer; display: block; margin: 0px auto 10px; text-align: center;" /&gt;&lt;/a&gt;&lt;br /&gt;
Edit the project's properties and add the following directory to the "Additional Include Directories" under "Configuration Properties"-&amp;gt;C/C++-&amp;gt;General:&lt;br /&gt;
&lt;br /&gt;
&lt;p:colorscheme colors="#ffffff,#000000,#808080,#000000,#bbe0e3,#333399,#009999,#99cc00"&gt;&lt;/p:colorscheme&gt;&lt;div class="O" shape="_x0000_s1026"&gt;&lt;div&gt;&lt;span style="font-size: 130%;"&gt;"c:\program files\solidworks\samples\appcomm\win32\"&lt;/span&gt; &lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/_Ac0gUZe6XLk/R_8CK6WGlzI/AAAAAAAAAFE/1N5UTk-Lr7c/s1600-h/additional-include-dirs.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5187867682238011186" src="http://3.bp.blogspot.com/_Ac0gUZe6XLk/R_8CK6WGlzI/AAAAAAAAAFE/1N5UTk-Lr7c/s320/additional-include-dirs.png" style="cursor: pointer; display: block; margin: 0px auto 10px; text-align: center;" /&gt;&lt;/a&gt;&lt;br /&gt;
You should have a "cpp" file named swbatch.cpp (or something similar depending on the name you selected for the console application). Open that file and add the following code to it above the main() (or _tmain()) function.&lt;br /&gt;
&lt;blockquote&gt;&lt;span style="font-weight: bold;"&gt;#include "iostream"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;#include "objbase.h"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;#include "atlbase.h"&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;//Import the SolidWorks type library&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;#import "C:\Program Files\SolidWorks\sldworks.tlb" raw_interfaces_only, raw_native_types, no_namespace, named_guids &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;//Import the SolidWorks constant type library    &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;#import "C:\Program Files\SolidWorks\swconst.tlb"  raw_interfaces_only, raw_native_types, no_namespace, named_guids&lt;/span&gt; &lt;/blockquote&gt;Then modify your main() (or _tmain()) function to look like the source code included in the zip file. I apologize for not posting the code directly into the body of this post, but Blogger was messing up the formatting.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: 130%;"&gt;&lt;span style="font-size: 100%;"&gt;Make the following changes to the code in main():&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Make sure you have a SLDPRT file in the location stated above instead of "C:\\swbatch\\Debug\\camtest.sldprt". Change the path to which &lt;span style="font-weight: bold;"&gt;sFileName&lt;/span&gt; points to, to coincide with your true path.&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;Build the solution and execute it. The console application will startup and silently load SolidWorks. If you have Windows Task Manager open then you will see SLDWORKS.exe running. If the SLDPRT is found in the right location, then the code above reads the SLDPRT and throws a MessageBox with the name of the first feature of the SLDPRT, which in this case is "Annotations". After the program exits, SolidWorks exits too.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: 130%;"&gt;Note:&lt;br /&gt;
Please keep in mind the following points about the code in main() in the zip file&lt;/span&gt;:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;I first tried to use OpenDoc6 as follows:&lt;/li&gt;
&lt;/ul&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote style="font-weight: bold;"&gt;swApp-&amp;gt;OpenDoc6(L"C:\\cygwin\\home\\ganesh\\downloads\\imagecom\\batch\\camtest.sldprt", swDocPART, swOpenDocOptions_Silent, L"Default", &amp;amp;fileerror, &amp;amp;filewarning, &amp;amp;swModel)&lt;/blockquote&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;By doing that, SolidWorks started up with its GUI and then tried to load the model, which was not what we wanted. Next I tried an old API OpenDocSilent() as follows:&lt;/li&gt;

&lt;ul&gt;&lt;li&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote style="font-weight: bold;"&gt;swApp-&amp;gt;IOpenDocSilent(sFileName, swDocPART, &amp;amp;fileerror, &amp;amp;swModel)&lt;/blockquote&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;This had the required effect of opening SolidWorks silently and loading the model in it.&lt;/li&gt;
&lt;li&gt;The other big problem I noticed was: &lt;span style="font-weight: bold;"&gt;IF YOU LOAD A READ-ONLY SLDPRT INTO SOLIDWORKS USING OPENDOCSILENT(), FOR SOME REASON SOLIDWORKS STARTS UP WITH GUI.&lt;/span&gt; The only solution I have for this at the present is to not load read-only parts or assemblies.&lt;/li&gt;
&lt;/ul&gt;If you found this article useful, please let me know. It helps me identify which posts, my readers prefer.&lt;br /&gt;
&lt;br /&gt;
UPDATE: THE POST WAS UPDATED ON AUGUST 3RD 2009 TO REPLACE THE DOWNLOAD LINK FOR SWBATCH.ZIP. PREVIOUSLY SWBATCH.ZIP WAS SERVED FROM BOX.NET. IT IS NOT BEING SERVED FROM GOOGLECODE.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7274961-6359410516564459314?l=ossandcad.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EA3nvCjF-17ZQLEizdONa-wTwpc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EA3nvCjF-17ZQLEizdONa-wTwpc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EA3nvCjF-17ZQLEizdONa-wTwpc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EA3nvCjF-17ZQLEizdONa-wTwpc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=NlKqbzM8"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?i=NlKqbzM8" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=WrwAvURn"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=zY90rcPz"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ossandcad/~4/eI3Rm0nJbrc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ossandcad.blogspot.com/feeds/6359410516564459314/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ossandcad.blogspot.com/2008/04/batch-mode-solidworks.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/6359410516564459314?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/6359410516564459314?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ossandcad/~3/eI3Rm0nJbrc/batch-mode-solidworks.html" title="Batch mode SolidWorks" /><author><name>Ganeshram Iyer</name><uri>http://www.blogger.com/profile/09189272659983924981</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="15240405801582043438" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_Ac0gUZe6XLk/Sle_shjmqnI/AAAAAAAAAfQ/lob5roUfKbk/s72-c/zip.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://ossandcad.blogspot.com/2008/04/batch-mode-solidworks.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMGQns4fyp7ImA9WxZUGEk.&quot;"><id>tag:blogger.com,1999:blog-7274961.post-15988854237195538</id><published>2008-04-04T18:27:00.017-05:00</published><updated>2008-04-10T11:03:43.537-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-10T11:03:43.537-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cad" /><category scheme="http://www.blogger.com/atom/ns#" term="proengineer" /><category scheme="http://www.blogger.com/atom/ns#" term="pro toolkit" /><category scheme="http://www.blogger.com/atom/ns#" term="protoolkit" /><title>Batch mode Pro/Engineer</title><content type="html">Have any of you tried to start Pro/Engineer in batch mode? I found the following suggestion in Pro/Toolkit documentation tkuse.pdf:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;"To ensure that the Pro/ENGINEER main Graphics Window and Message Window are not displayed, you should use either the command-line option -g:no_graphics (or the configuration file option “graphics NO_GRAPHICS”) to turn off the Pro/ENGINEER graphics."&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;So to start Pro/Engineer in batch mode with no graphics try the following with Pro/Engineer Wildfire 3.0. To execute this simply open a command prompt using Windows Start-&gt;Run-&gt; Enter "cmd", press OK, enter the following into the command prompt and enter enter.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;"C:\Program Files\proeWildfire 3.0\bin\proe.exe" -g:&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;no_graphics &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To verify if Pro/Engineer started with no GUI simply open Task Manager and look for xtop.exe, which is Pro/Engineer's executable. But since no processing is happening, xtop.exe will quit after a few seconds.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Why is this important?&lt;/span&gt;&lt;br /&gt;Well if you wanted to perform the same operations on numerous files (part or assembly), then theoretically you could execute Pro/Engineer without GUI from the directory where you have a Pro/Toolkit application installed with a protk.dat registry file and Pro/Engineer will load that Pro/Toolkit application. The application can then perform its functions without needing user interaction. For an example see this &lt;a href="http://www.profilesmagazine.com/p35/muirhead.html"&gt;link &lt;/a&gt;where they use this method but instead of a Pro/Toolkit application they use the "trail" files to script the batch processing. Something similar can be duplicated with a Pro/Toolkit application.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Why do I mention this? &lt;/span&gt;&lt;br /&gt;As a developer of Pro/Toolkit applications it is very important for me to able to test my program thoroughly with as much automation as possible. By using the batch mode without GUI provided with Pro/Engineer I can create a workspace that tests my application using numerous combinations of input and output without user interaction.&lt;br /&gt;&lt;br /&gt;I plan to write on topics related to integrated test frameworks for Pro/Toolkit  applications and batch mode could become an important part of that. Keep following my blog for similar posts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7274961-15988854237195538?l=ossandcad.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9PIh0SL_FuNz_qTI7MbsR_0du7U/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9PIh0SL_FuNz_qTI7MbsR_0du7U/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9PIh0SL_FuNz_qTI7MbsR_0du7U/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9PIh0SL_FuNz_qTI7MbsR_0du7U/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=Pd1GKral"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?i=Pd1GKral" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=MhW3SmBD"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=2KQSjiMs"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ossandcad/~4/r2f7QWUJl4g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ossandcad.blogspot.com/feeds/15988854237195538/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ossandcad.blogspot.com/2008/04/batch-mode-proengineer.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/15988854237195538?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/15988854237195538?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ossandcad/~3/r2f7QWUJl4g/batch-mode-proengineer.html" title="Batch mode Pro/Engineer" /><author><name>Ganeshram Iyer</name><uri>http://www.blogger.com/profile/09189272659983924981</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="15240405801582043438" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://ossandcad.blogspot.com/2008/04/batch-mode-proengineer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4GQHg6eSp7ImA9WxJaFks.&quot;"><id>tag:blogger.com,1999:blog-7274961.post-9042471608061540284</id><published>2008-03-26T02:05:00.057-05:00</published><updated>2009-08-07T12:08:41.611-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-07T12:08:41.611-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="visual studio" /><category scheme="http://www.blogger.com/atom/ns#" term="pro toolkit" /><category scheme="http://www.blogger.com/atom/ns#" term="protoolkit" /><title>HOWTO: Example Pro/Toolkit Application using Visual Studio 2005</title><content type="html">In my previous post titled "&lt;span style="font-size:100%;"&gt;&lt;a href="http://ossandcad.blogspot.com/2008/02/protookit-application-using-visual.html"&gt;Example ProTookit Application using Visual Studio 2005&lt;/a&gt;" I received a comment asking to explain how I created the sample workspace (Pro/Toolkit Application using Visual C++ 2005)  which can be downloaded by clicking the file below:&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;!--embed src="http://www.box.net/static/flash/box_explorer.swf?widgetHash=xvzvctm88c" wmode="transparent" type="application/x-shockwave-flash" height="225" width="400"&gt;&lt;/embed--&gt;&lt;br /&gt;
&lt;a href="http://ossandcad.googlecode.com/files/ProToolkitVisualCpp.zip"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5356961053423348338" src="http://2.bp.blogspot.com/_Ac0gUZe6XLk/Sle_shjmqnI/AAAAAAAAAfQ/lob5roUfKbk/s320/zip.jpg" style="cursor: pointer; float: left; height: 116px; margin: 0pt 10px 10px 0pt; width: 116px;" /&gt;&lt;br /&gt;
http://ossandcad.googlecode.com/files/ProToolkitVisualCpp.zip&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I should point out that the workspace that is attached above, while it is currently in Visual Studio 2005 format, came initially from Visual Studio 2002 (or known as Visual Studio.NET) and my colleagues and I regularly updated the workspace in current versions of Visual Studio.&lt;br /&gt;
&lt;br /&gt;
In this post I try and explain the steps I used to create a sample workspace from scratch in Visual Studio 2005 for Pro/Toolkit applications. For more details (although with some mistakes some of which I will list in future posts) refer to "tkuse.pdf" in "C:\Program Files\proeWildfire 3.0\protoolkit".&lt;br /&gt;
&lt;br /&gt;
I break the process down into following steps:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size:180%;"&gt;Creating the Visual Studio 2005 solution&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The easiest method I know of to create a Pro/Toolkit Application in Visual Studio 2005 (that matches the above workspace) is to start with an Empty Project. Name it "proe" for example.&lt;br /&gt;
&lt;br /&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Ac0gUZe6XLk/R-suw1T1gqI/AAAAAAAAADs/H47VzVDu7Tg/s1600-h/empty-project.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_Ac0gUZe6XLk/R-suw1T1gqI/AAAAAAAAADs/H47VzVDu7Tg/s320/empty-project.png" alt="" id="BLOGGER_PHOTO_ID_5182287212698763938" border="0" /&gt;&lt;/a&gt;Add a file named "main.cpp".&lt;br /&gt;
&lt;br /&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Ac0gUZe6XLk/R-swNlT1gsI/AAAAAAAAAD8/5FEvay_5y0A/s1600-h/main-cpp.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_Ac0gUZe6XLk/R-swNlT1gsI/AAAAAAAAAD8/5FEvay_5y0A/s320/main-cpp.png" alt="" id="BLOGGER_PHOTO_ID_5182288806131630786" border="0" /&gt;&lt;/a&gt;Add the following code to "main.cpp"&lt;br /&gt;
&lt;blockquote&gt;#include &amp;lt;windows.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;protoolkit.h&amp;gt;&lt;br /&gt;
#include &amp;lt;procore.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/** Make sure to call ProToolkitMain passing the arguments passed into main&lt;br /&gt;
*/&lt;br /&gt;
extern "C" int main(int argc, char **argv)&lt;br /&gt;
{&lt;br /&gt;
ProToolkitMain(argc, argv);&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**    Required entry point for Pro/Toolkit&lt;br /&gt;
*/&lt;br /&gt;
extern "C" int user_initialize()&lt;br /&gt;
{&lt;br /&gt;
MessageBox(NULL, "Pro/Toolkit App", "proe", MB_OK);&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
extern "C" void user_terminate()&lt;br /&gt;
{&lt;br /&gt;
return;&lt;br /&gt;
}&lt;/blockquote&gt;Change the "Configuration Type" to "Dynamic Library (.dll)".&lt;br /&gt;
&lt;br /&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Ac0gUZe6XLk/R-svi1T1grI/AAAAAAAAAD0/AjtXW_DE5ZY/s1600-h/dll-type.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_Ac0gUZe6XLk/R-svi1T1grI/AAAAAAAAAD0/AjtXW_DE5ZY/s320/dll-type.png" alt="" id="BLOGGER_PHOTO_ID_5182288071692223154" border="0" /&gt;&lt;/a&gt;Add the relevant include folders for Pro/Toolkit ("C:\Program Files\proeWildfire 3.0\protoolkit\includes";"C:\Program Files\proeWildfire 3.0\prodevelop\includes").&lt;br /&gt;
&lt;br /&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Ac0gUZe6XLk/R-sxOFT1gtI/AAAAAAAAAEE/ZAyzry4ub7Q/s1600-h/includes.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_Ac0gUZe6XLk/R-sxOFT1gtI/AAAAAAAAAEE/ZAyzry4ub7Q/s320/includes.png" alt="" id="BLOGGER_PHOTO_ID_5182289914233193170" border="0" /&gt;&lt;/a&gt;Add the following pre-processor definitions (WIN32;NDEBUG;_WINDOWS;_USRDLL;PROE_PROJ_EXPORTS;PRO_MACHINE=29; PRO_OS=4;hypot=_hypot;MSB_LEFT;far=ptc_far;huge=p_huge;near=p_near;_X86_=1)&lt;br /&gt;
&lt;br /&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Ac0gUZe6XLk/R-syJlT1guI/AAAAAAAAAEM/aGddGSQXd58/s1600-h/preproc-defns.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_Ac0gUZe6XLk/R-syJlT1guI/AAAAAAAAAEM/aGddGSQXd58/s320/preproc-defns.png" alt="" id="BLOGGER_PHOTO_ID_5182290936435409634" border="0" /&gt;&lt;/a&gt;Make sure for the Runtime Library you are using "Multi-threaded DLL (/MD)" or the "Multi-threaded Debug DLL (/MDd)" based on whether you are using "Release" or "Debug" configuration respectively.&lt;br /&gt;
&lt;br /&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Ac0gUZe6XLk/R-sy_1T1gvI/AAAAAAAAAEU/LNognCqbeGg/s1600-h/runtime-lib.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_Ac0gUZe6XLk/R-sy_1T1gvI/AAAAAAAAAEU/LNognCqbeGg/s320/runtime-lib.png" alt="" id="BLOGGER_PHOTO_ID_5182291868443312882" border="0" /&gt;&lt;/a&gt;Make sure that the "Treat wchar_t as Built-in Type" is set to "No (/Zc:wchar_t-)".&lt;br /&gt;
&lt;br /&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Ac0gUZe6XLk/R-s1OFT1gyI/AAAAAAAAAEs/mmnu1I4iZFo/s1600-h/wchar.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_Ac0gUZe6XLk/R-s1OFT1gyI/AAAAAAAAAEs/mmnu1I4iZFo/s320/wchar.png" alt="" id="BLOGGER_PHOTO_ID_5182294312279704354" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;
Add the relevant Pro/Toolkit and Pro/Develop library folders ("C:\Program Files\proeWildfire 3.0\prodevelop\i486_nt\obj";"C:\Program Files\proeWildfire 3.0\protoolkit\i486_nt\obj").&lt;br /&gt;
&lt;br /&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Ac0gUZe6XLk/R-szwlT1gwI/AAAAAAAAAEc/avIyymO0Z5I/s1600-h/lib-folders.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_Ac0gUZe6XLk/R-szwlT1gwI/AAAAAAAAAEc/avIyymO0Z5I/s320/lib-folders.png" alt="" id="BLOGGER_PHOTO_ID_5182292705961935618" border="0" /&gt;&lt;/a&gt;Add the "Additional Dependencies" (wsock32.lib mpr.lib prodev_dllmd.lib protk_dllmd.lib psapi.lib)&lt;br /&gt;
&lt;br /&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Ac0gUZe6XLk/R-s0MlT1gxI/AAAAAAAAAEk/Y3wS9lzscHM/s1600-h/add-depends.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_Ac0gUZe6XLk/R-s0MlT1gxI/AAAAAAAAAEk/Y3wS9lzscHM/s320/add-depends.png" alt="" id="BLOGGER_PHOTO_ID_5182293186998272786" border="0" /&gt;&lt;/a&gt;Do a Rebuild and make sure you have a DLL named "proe.dll" in a sub-folder named Debug or Release depending on your build configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size:180%;"&gt;Creating the Pro/Toolkit application files and message files&lt;br /&gt;
&lt;span style="font-size:100%;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;Pro/Engineer loads Pro/Toolkit applications  using a registration file named "protk.dat" in the Debug AND Release folder. You need to create a protk.dat file for the Pro/Toolkit DLL that you created using the workspace above. While developing and testing the Pro/Toolkit application I use the following "protk.dat":&lt;br /&gt;
&lt;blockquote&gt;NAME       proe&lt;br /&gt;
EXEC_FILE  proe1.dll&lt;br /&gt;
TEXT_DIR   ..\text&lt;br /&gt;
STARTUP    DLL&lt;br /&gt;
allow_stop TRUE&lt;br /&gt;
revision   Wildfire&lt;br /&gt;
END&lt;/blockquote&gt;&lt;br /&gt;
The "protk.dat" is pretty easy to understand although it would have helped if Pro/Engineer used a more standard method such as the Windows Registry (although that may not work since Pro/Engineer is multi-platform). The main variables you need to be aware of are:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;TEXT_DIR - The value for this variable is "..\text". This means you need to create a sub-folder named "text" under your main folder. In the "text" folder create a text file named "menu.txt". The "text" folder and the text file "menu.txt" (the name can be changed but I don't delve into that in this post) are Pro/Engineer's bizarre method to enable &lt;a href="http://en.wikipedia.org/wiki/Internationalization_and_localization"&gt;localization&lt;/a&gt;. The "menu.txt" file looks something like the following:&lt;/li&gt;
&lt;/ul&gt;&lt;blockquote&gt;USER %0s&lt;br /&gt;
%0s&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
MenuLabel&lt;br /&gt;
Menu&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
PushButton&lt;br /&gt;
PushButton&lt;br /&gt;
#&lt;br /&gt;
#&lt;/blockquote&gt;It simply lists the label that is seen by the Pro/Toolkit application and its corresponding value. Most Visual C++ developers use either a String Table or other sort of Resource. If you think this is weird, I think it may have something to do with Pro/Engineer supporting multiple Operating Systems.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;STARTUP - For the example provided the type is "DLL".&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;span style="font-size:180%;"&gt;Execute Pro/Engineer and load the Pro/Toolkit Application&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size:100%;"&gt;While developing and testing your Pro/Toolkit application I use the following method:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Create a shortcut to "C:\Program Files\proeWildfire 3.0\bin\proe.exe" in your Pro/Toolkit's "Debug" or "Release" folder.&lt;/li&gt;
&lt;li&gt;Make sure the "Start in" text box for this shortcut remains empty which means that this shortcut will start Pro/Engineer in the current folder and will automatically load the DLL specified in protk.dat located in the same folder.&lt;/li&gt;
&lt;li&gt;Double click the shortcut you created to run Pro/Engineer. If you get a message box with the text "Pro/Toolkit App" then IT WORKED. REJOICE.&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Ac0gUZe6XLk/R-s83lT1gzI/AAAAAAAAAE0/6JQjrs84onk/s1600-h/proe.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_Ac0gUZe6XLk/R-s83lT1gzI/AAAAAAAAAE0/6JQjrs84onk/s320/proe.png" alt="" id="BLOGGER_PHOTO_ID_5182302721825669938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;
If the method in the above post did not work for you, you can also download the ZIP file I have provided and try that out. If you need more help, post a comment and I will try to provide more information.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7274961-9042471608061540284?l=ossandcad.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZGhiMk76el_B7yLTef7_SnB5u1E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZGhiMk76el_B7yLTef7_SnB5u1E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZGhiMk76el_B7yLTef7_SnB5u1E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZGhiMk76el_B7yLTef7_SnB5u1E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=z0V7Ztp3"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?i=z0V7Ztp3" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=8GSOVJYo"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=XJUCJxwU"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ossandcad/~4/rfpVYtO30J0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ossandcad.blogspot.com/feeds/9042471608061540284/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ossandcad.blogspot.com/2008/03/howto-example-protoolkit-application.html#comment-form" title="27 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/9042471608061540284?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/9042471608061540284?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ossandcad/~3/rfpVYtO30J0/howto-example-protoolkit-application.html" title="HOWTO: Example Pro/Toolkit Application using Visual Studio 2005" /><author><name>Ganeshram Iyer</name><uri>http://www.blogger.com/profile/09189272659983924981</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="15240405801582043438" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_Ac0gUZe6XLk/Sle_shjmqnI/AAAAAAAAAfQ/lob5roUfKbk/s72-c/zip.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">27</thr:total><feedburner:origLink>http://ossandcad.blogspot.com/2008/03/howto-example-protoolkit-application.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIMQ3k8eip7ImA9WxJaFks.&quot;"><id>tag:blogger.com,1999:blog-7274961.post-6037796414765044617</id><published>2008-02-14T18:41:00.011-06:00</published><updated>2009-08-07T13:09:42.772-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-07T13:09:42.772-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="visual studio" /><category scheme="http://www.blogger.com/atom/ns#" term="cad" /><category scheme="http://www.blogger.com/atom/ns#" term="example" /><category scheme="http://www.blogger.com/atom/ns#" term="protoolkit" /><title>Example ProTookit Application using Visual Studio 2005</title><content type="html">&lt;a href="http://www.ptc.com/"&gt;PTC&lt;/a&gt; has been offering an Application Programming Interface (API) for Pro/Engineer for many years now and I have seen an &lt;a href="http://gicl.cs.drexel.edu/wiki/Pro/TOOLKIT"&gt;article&lt;/a&gt; or &lt;a href="http://www.caddigest.com/subjects/pro_engineer/select/tutorials/jovanovic_toolkit_environment.htm"&gt;two&lt;/a&gt; or &lt;a href="http://www.purplerose.biz/Vin/new_page_14.htm"&gt;three&lt;/a&gt; online that shows you how to develop Pro/Toolkit applications using Visual C++. These are very useful and if you navigate to the bottom of the page on article &lt;a href="http://www.purplerose.biz/Vin/new_page_14.htm"&gt;three&lt;/a&gt; then you will find a few zip files that you can download and start working with Visual C++ and Pro/Toolkit quickly. There is even a &lt;a href="http://www.frotime.com/Tutorials/Tutorials_Single_Description.aspx?ProductID=205"&gt;site&lt;/a&gt; that sells you tutorials on how to develop Pro/Toolkit applications. Of course I have never purchased any such tutorials so am unable to recommend them.&lt;br /&gt;
&lt;br /&gt;
Interestingly very little outside help is available on developing Pro/Toolkit Applications using Visual C++. Simply &lt;a href="http://www.google.com/search?q=pro%2Ftoolkit+help&amp;amp;sourceid=navclient-ff&amp;amp;ie=UTF-8&amp;amp;rls=GGIC,GGIC:1970--2,GGIC:en"&gt;Googling for Pro/Toolkit help&lt;/a&gt; is of very very little help. So what is a Pro/Toolkit developer to do?&lt;br /&gt;
&lt;br /&gt;
In an effort to help other Pro/Toolkit developers who are using Visual C++ 2005 I have attached a zipped workspace created in Visual Studio 2005. This zipped workspace allows you to create a DLL that creates a Menu in the Pro/Engineer interface. Please use this workspace as a starting point - it is not by no means the perfect workspace (for example I currently put the menu.txt in two locations - which is not the most efficient way to do it). This workspace was created and donated by a colleague of mine, Amar Junankar (although I had created a similar workspace and have kept it updated for many years).&lt;br /&gt;
&lt;br /&gt;
&lt;!--embed src="http://www.box.net/static/flash/box_explorer.swf?widgetHash=xvzvctm88c" wmode="transparent" type="application/x-shockwave-flash" height="225" width="400"&gt;&lt;/embed--&gt;&lt;br /&gt;
&lt;a href="http://ossandcad.googlecode.com/files/ProToolkitVisualCpp.zip"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5356961053423348338" src="http://2.bp.blogspot.com/_Ac0gUZe6XLk/Sle_shjmqnI/AAAAAAAAAfQ/lob5roUfKbk/s320/zip.jpg" style="cursor: pointer; float: left; height: 116px; margin: 0pt 10px 10px 0pt; width: 116px;" /&gt;&lt;br /&gt;
http://ossandcad.googlecode.com/files/ProToolkitVisualCpp.zip&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you notice carefully in the workspace (after unzipping) in both the "debug" and "release" sub-folders there is a batch file named "Start_ProE_Here.bat". What this batch file does is start Pro/Engineer (default location of "C:\Program Files\proeWildfire 3.0\bin\proe.exe") from the "debug" or "release" (viz. current) sub-folder. This ensures that the protk.dat (which Pro/Engineer uses to register Pro/Toolkit applications) is loaded on startup of Pro/Engineer thus enabling our Pro/Toolkit application. Of course before starting this batch file, please do a build of both debug and release configurations.&lt;br /&gt;
&lt;br /&gt;
As a side note: In my next post I will add to this workspace the necessary lines of code that will allow a developer to call .NET assemblies from within the Pro/Toolkit Application.&lt;br /&gt;
&lt;br /&gt;
If you need any help please post a comment and I will try to help as much as I can.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7274961-6037796414765044617?l=ossandcad.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KPfp_Z69WNnuVEISinqJ_QFPZM4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KPfp_Z69WNnuVEISinqJ_QFPZM4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KPfp_Z69WNnuVEISinqJ_QFPZM4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KPfp_Z69WNnuVEISinqJ_QFPZM4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=FGecSOfA"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?i=FGecSOfA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=jlT2OZx5"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=bszdNZs2"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ossandcad/~4/AjIh_dxuzTg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ossandcad.blogspot.com/feeds/6037796414765044617/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ossandcad.blogspot.com/2008/02/protookit-application-using-visual.html#comment-form" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/6037796414765044617?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/6037796414765044617?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ossandcad/~3/AjIh_dxuzTg/protookit-application-using-visual.html" title="Example ProTookit Application using Visual Studio 2005" /><author><name>Ganeshram Iyer</name><uri>http://www.blogger.com/profile/09189272659983924981</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="15240405801582043438" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_Ac0gUZe6XLk/Sle_shjmqnI/AAAAAAAAAfQ/lob5roUfKbk/s72-c/zip.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">7</thr:total><feedburner:origLink>http://ossandcad.blogspot.com/2008/02/protookit-application-using-visual.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQBQ3o_cSp7ImA9WxZREUg.&quot;"><id>tag:blogger.com,1999:blog-7274961.post-8289082274556412017</id><published>2008-02-04T11:06:00.000-06:00</published><updated>2008-02-04T12:39:12.449-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-02-04T12:39:12.449-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cad" /><category scheme="http://www.blogger.com/atom/ns#" term="protoolkit" /><title>.NET in Pro/Toolkit</title><content type="html">Summary: Can we use .NET to develop Pro/Toolkit applications for Pro/Engineer?&lt;br /&gt;&lt;br /&gt;I have seen numerous articles providing tutorials (heres &lt;a href="http://www.purplerose.biz/Vin/new_page_14.htm"&gt;one&lt;/a&gt; and &lt;a href="http://gicl.cs.drexel.edu/wiki/Pro/TOOLKIT"&gt;another one&lt;/a&gt;) on how to develop Pro/Toolkit applications using Visual C++ (either 2003 or 2005). Now the articles refer to developing Pro/Toolkit applications using Visual C++.NET which I think is misleading since the .NET portion refers (I believe) to Managed Visual C++ code while the articles refer to Unmanaged Visual C++ code.&lt;br /&gt;&lt;br /&gt;So this begs the question: how does one develop Pro/Toolkit applications using Visual C++.NET Managed Code and is this even possible?&lt;br /&gt;&lt;br /&gt;The short answer is NO - YOU CANNOT DEVELOP Pro/Toolkit APPLICATIONS USING VISUAL C++.NET MANAGED CODE (or C# or Visual Basic.NET).&lt;br /&gt;&lt;br /&gt;The long answer is PERHAPS - I found a product by ETRAGE LLC named &lt;a href="http://www.etrage.com/products/aci/proes/products_ACI_for_ProENGINEER.htm"&gt;ACI for Pro/Engineer&lt;/a&gt; that provides a COM wrapper around Pro/Toolkit functions. Using such a wrapper developers can code Pro/Toolkit applications using pure .NET languages. In fact the &lt;a href="http://www.etrage.com/products/aci/proes/products_ACI_for_ProENGINEER.htm"&gt;product page&lt;/a&gt; provides sample code in Visual Basic.NET. This is pretty nice, since if I were to replicate such functionality then I would need to create a DLL (since I could not find a DLL containing Pro/Toolkit functions for Pro/Engineer Wildfire 3.0) that exports the functions in the LIB and mentioned in the header files and then use that DLL in .NET through .NET's Platform Invoke - which is a lot of work - not difficult but a lot of work (major testing would be required). I will try this method out and if it works will post another article with a HowTo.&lt;br /&gt;&lt;br /&gt;But suppose you wanted to merely call functions from .NET classes in your Pro/Toolkit application then there is a simple way to do so using the idea of exposing .NET objects through COM interface. &lt;a href="http://www.codeproject.com/KB/cs/ManagedCOM.aspx"&gt;This article on CodeProject&lt;/a&gt; provides a great tutorial on how to do just that. Of course you are still developing the Pro/Toolkit application using Visual C++ but now you can consume .NET objects easily.&lt;br /&gt;&lt;br /&gt;An FYI though if you use the method suggested by the CodeProject article - there is a slight slowdown when you call the COM methods (I think the call to &lt;span style="font-family: monospace;"&gt;&lt;/span&gt;CoInitialize is what causes this problem) - so initialize and finalize the COM components once for your application instead of for each method call.&lt;br /&gt;&lt;br /&gt;I will try and post a sample workspace with my next post that shows how to use .NET objects in Pro/Toolkit applications. If anyone has any comments or questions please provide them below I will do my best to answer them.&lt;span name="intelliTxt" id="intelliTXT"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7274961-8289082274556412017?l=ossandcad.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IJPfmlTdwdQaovc7d6vkIfWgjbQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IJPfmlTdwdQaovc7d6vkIfWgjbQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IJPfmlTdwdQaovc7d6vkIfWgjbQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IJPfmlTdwdQaovc7d6vkIfWgjbQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=OFMiTBi1"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?i=OFMiTBi1" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=zilZS8oG"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=FZgDfGhQ"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ossandcad/~4/5zGSo2wGZww" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ossandcad.blogspot.com/feeds/8289082274556412017/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ossandcad.blogspot.com/2008/02/net-in-protoolkit.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/8289082274556412017?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/8289082274556412017?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ossandcad/~3/5zGSo2wGZww/net-in-protoolkit.html" title=".NET in Pro/Toolkit" /><author><name>Ganeshram Iyer</name><uri>http://www.blogger.com/profile/09189272659983924981</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="15240405801582043438" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://ossandcad.blogspot.com/2008/02/net-in-protoolkit.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AMQ384fip7ImA9WxZREUg.&quot;"><id>tag:blogger.com,1999:blog-7274961.post-110723674335520351</id><published>2008-01-31T23:37:00.000-06:00</published><updated>2008-02-04T13:03:02.136-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-02-04T13:03:02.136-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mms" /><title>Register MMS protocol in Firefox</title><content type="html">&lt;span style="font-style: italic;"&gt;Update: Surprisingly this post (originally posted in January 2005) still seems alive 3 years after my post. I should warn that I have not tried this method with Firefox versions later than 1.0 and have only tried it on Suse Linux Personal 9.1. If you need help please post a comment and I will try to help. I no longer use Suse and have since moved to Ubuntu (currently using Dapper LTS since I don't have time or need to update often) but will try to help as much as I can. Please see the comments on this post to see if someone has already tried to achieve what you want to.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://www.microsoft.com/resources/documentation/WindowsServ/2003/standard/proddocs/en-us/Default.asp?url=/resources/documentation/WindowsServ/2003/standard/proddocs/en-us/wmserver/wmsmmsservercontrolprotocol.asp"&gt;MMS&lt;/a&gt; stands for Microsoft Media Services and as the Microsoft site says it is a &lt;span style="font-weight: bold;"&gt;proprietary&lt;/span&gt; streaming media protocol. This means that Internet Explorer (IE) has this protocol registered by default but Mozilla Firefox will need some tweaking before it lets you play mms:// streams.&lt;br /&gt;&lt;br /&gt;I have tested this on Mozilla Firefox 1.0 (rpm version = MozillaFirefox-1.0-2.1) on Suse Linux Personal 9.1 and also Fedora Core 3. I believe this method will work on other versions of Mozilla Firefox and Linux OSs but have not tested them. Also the method suggested here is per user alone and not per install. I have included &lt;a href="http://www.mplayerhq.hu/"&gt;mplayer&lt;/a&gt; as the multimedia application that will play the mms:// stream. I assume that you have mplayer installed properly and able to play mms:// streams. You can try other media players but I have not tested others.&lt;br /&gt;&lt;br /&gt;NOTE: Entering values/names/url's should be done without quote marks.&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;In the URL bar of Firefox type "about:config".&lt;/li&gt;   &lt;li&gt;You need to create two new values as follows:&lt;/li&gt;   &lt;ol&gt;     &lt;li&gt;Right click in the Firefox main window, click on "New" and select "String".&lt;/li&gt;     &lt;li&gt;In the text box that pops up type "network.protocol-handler.app.mms" for the preference name. Click OK.&lt;/li&gt;     &lt;li&gt;For Value enter "/usr/local/bin/gmplayer". This is where my gmplayer is installed. If you have it in a different location, type that in for the value. To find where gmplayer is installed on your computer enter &lt;span style="font-style: italic;"&gt;whereis gmplayer &lt;/span&gt;in a console. Enter the value that the "whereis" query outputs. Click OK.&lt;/li&gt;   &lt;/ol&gt; &lt;/ol&gt; &lt;ol&gt;   &lt;ol&gt;     &lt;li&gt;  Right click in the Firefox main window, click on "New" and select "Boolean".&lt;/li&gt;     &lt;li&gt;In the text box that pops up type "network.protocol-handler.external.mms" for the preference name. Click OK.&lt;/li&gt;     &lt;li&gt;For value enter "true". Click OK.&lt;/li&gt;   &lt;/ol&gt; &lt;/ol&gt; At the end of this process you should have these two new values (type mms in the filter text box in the about:config window)&lt;br /&gt;&lt;br /&gt;- Preference name: network.protocol-handler.app.mms&lt;br /&gt;Status: user set&lt;br /&gt;Type: string&lt;br /&gt;Value: /usr/local/bin/gmplayer&lt;br /&gt;&lt;br /&gt;- Preference name: network.protocol-handler.external.mms&lt;br /&gt;Status: user set&lt;br /&gt;Type: boolean&lt;br /&gt;Value: true&lt;br /&gt;&lt;br /&gt;Now go to a site that provides mms:// streams and test. If this does not work, then I would suggest that you test to see if your default player can play the mms:// streams. Pass the URL of the mms:// stream to mplayer directly using the command line/GUI. If it plays then try a different profile in Mozilla Firefox and see if that works (you can create a new profile by using either the" firefox -P" or the firefox -ProfileManager" commands).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7274961-110723674335520351?l=ossandcad.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/JFZWLaF2EIIiX5Wyqbzqr3xtRns/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JFZWLaF2EIIiX5Wyqbzqr3xtRns/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/JFZWLaF2EIIiX5Wyqbzqr3xtRns/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JFZWLaF2EIIiX5Wyqbzqr3xtRns/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=gxeXkfwA"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?i=gxeXkfwA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=HNeoh5Rf"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=e3Fidid1"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ossandcad/~4/JfCiKhqfMqo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ossandcad.blogspot.com/feeds/110723674335520351/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ossandcad.blogspot.com/2005/01/register-mms-protocol-in-firefox.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/110723674335520351?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/110723674335520351?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ossandcad/~3/JfCiKhqfMqo/register-mms-protocol-in-firefox.html" title="Register MMS protocol in Firefox" /><author><name>Ganeshram Iyer</name><uri>http://www.blogger.com/profile/09189272659983924981</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="15240405801582043438" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://ossandcad.blogspot.com/2005/01/register-mms-protocol-in-firefox.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcCQH0zfCp7ImA9WxdQF04.&quot;"><id>tag:blogger.com,1999:blog-7274961.post-7751201836171891160</id><published>2006-10-27T18:37:00.001-05:00</published><updated>2008-06-17T15:54:21.384-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-17T15:54:21.384-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="runas" /><category scheme="http://www.blogger.com/atom/ns#" term="security" /><title>Use Runas in Windows XP for increased security</title><content type="html">&lt;span style="font-style: italic;"&gt;Summary: Windows Administrators logged in as regular users needing to perform occasional administrative tasks can use Runas built into Windows XP. This post tells you how to manage files and folders in Windows Explorer using Runas.exe as Administrator while logged in as regular user.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;I know, I know this post has nothing to do with Open Source or CAD, but in my defense I used this solution while &lt;a href="http://ossandcad.blogspot.com/2006/10/run-3ds-max-as-regular-user.html"&gt;fixing the problem in my previous post with 3ds Max&lt;/a&gt;. Runas is what I use since I am normally logged into my Samba domain as regular Domain user but still need to perform administration tasks. We all know that logging in to Windows as administrator causes the most problems - so I avoid it.&lt;br /&gt;&lt;br /&gt;To test whether the changes I made to 3ds Max folders (license = "C:\C_Dilla\" and program folders = "C:\Program Files\3dsmax42\") solved the problem I was required to log in as Administrator, make changes, log off, log in as regular user, test 3ds Max - rinse and repeat as required numerous times.&lt;br /&gt;&lt;br /&gt;Well with this simpler (compared to multiple log offs and log ins) process I was able to avoid that problem. Thanks to &lt;a href="http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/runas.mspx?mfr=true"&gt;Microsoft Windows XP - Runas&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt; 1.    Log in as regular user.&lt;br /&gt; 2.    Start Task Manager using Ctrl + Shift + Esc.&lt;br /&gt; 3.    Find explorer.exe in Processes tab. Click on "End Process".&lt;br /&gt; 4.    Go to Applications tab. Click "New task".&lt;br /&gt; 5.    Enter "runas /user:administrator explorer.exe" without the quotes.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/465/888/1600/task-manager-runas.bmp.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger2/465/888/320/task-manager-runas.bmp.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;(Click image to enlarge)&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;    6.    Enter administrator password.&lt;br /&gt; 7.    Voila. Windows Explorers start in administrator mode including the desktop and taskbar.&lt;br /&gt; 8.    Once you are done playing with Windows Explorer and want your regular user's explorer, close the Task manager that you had opened in step 2.&lt;br /&gt; 9.    Once again open Task Manager using Ctrl + Shift + Esc. This is to ensure that the Task Manager that opens up is running as administrator and not as regular user that opened up in step 2.&lt;br /&gt; 10.    Find explorer.exe in Processes tab. Click on "End Process".&lt;br /&gt; 11.    Go to Applications tab. Click "New task".&lt;br /&gt; 12.    Enter "runas /user:&lt;span style="font-style: italic;"&gt;[regular user]&lt;/span&gt; explorer.exe" without the quotes. Make sure you replace &lt;span style="font-style: italic;"&gt;[regular user] &lt;/span&gt;with the username you are logged in as and know the password of.&lt;br /&gt; 13.    Enter regular user's password. And Windows Explorer, desktop and taskbar will start as the regular user.&lt;br /&gt;&lt;br /&gt;This process can get irritating after a while - especially if you have to enter the password numerous times. Try the following to save password (as long as your administrator password and your regular user password does not change).&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;runas /user:[regular user] &lt;span style="font-weight: bold;"&gt;/savecred&lt;/span&gt; explorer.exe&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;If the above does not work or you need more help leave me a comment. I will be more than happy to help.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7274961-7751201836171891160?l=ossandcad.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RHeap4rtEfElcJdX2iswtt82HCQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RHeap4rtEfElcJdX2iswtt82HCQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RHeap4rtEfElcJdX2iswtt82HCQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RHeap4rtEfElcJdX2iswtt82HCQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=YAdX2gg2"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?i=YAdX2gg2" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=HEuMWqVt"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=MHqIRem4"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ossandcad/~4/o7s3UvNlbX0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ossandcad.blogspot.com/feeds/7751201836171891160/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ossandcad.blogspot.com/2006/10/use-runas-in-windows-xp-for-increased.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/7751201836171891160?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/7751201836171891160?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ossandcad/~3/o7s3UvNlbX0/use-runas-in-windows-xp-for-increased.html" title="Use Runas in Windows XP for increased security" /><author><name>Ganeshram Iyer</name><uri>http://www.blogger.com/profile/09189272659983924981</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="15240405801582043438" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://ossandcad.blogspot.com/2006/10/use-runas-in-windows-xp-for-increased.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUBRXczfip7ImA9WBBSGUQ.&quot;"><id>tag:blogger.com,1999:blog-7274961.post-4562471686344400391</id><published>2006-10-27T17:55:00.000-05:00</published><updated>2006-10-27T18:37:34.986-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2006-10-27T18:37:34.986-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="3ds max" /><category scheme="http://www.blogger.com/atom/ns#" term="autodesk" /><category scheme="http://www.blogger.com/atom/ns#" term="security" /><title>Run 3ds Max as regular user</title><content type="html">&lt;span style="font-style: italic;"&gt;Summary: Running 3ds Max 4 as regular user causes problems but as administrator it works fine. The following is my solution.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In my lab we are still running 3ds Max 4, which at time of post is 5 versions too old. But one problem that was nagging us (till date), and were never able to solve, was that 3DS would run fine as administrator but on a regular user account it would never startup and throw a [16.1.7] error. A quick &lt;a href="http://www.google.com/search?num=20&amp;hl=en&amp;amp;lr=&amp;rls=GGGL%2CGGGL%3A2006-19%2CGGGL%3Aen&amp;amp;q=3ds+max+4+cdilla+16.1.7+site%3Aautodesk.com&amp;btnG=Search"&gt;Google search&lt;/a&gt; will pull the following &lt;a href="http://usa.autodesk.com/adsk/servlet/ps/item?siteID=123112&amp;amp;id=5582586&amp;linkID=5573345"&gt;solution&lt;/a&gt; from Autodesk's website. The basic solution to the problem is stated as follows:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Find folder "C:\C_Dilla". Make sure Hidden folders are visible. You can change this in Windows Explorer-&gt; Tools -&gt; Folder Options. The &lt;a href="http://usa.autodesk.com/adsk/servlet/ps/item?siteID=123112&amp;amp;amp;id=5582586&amp;linkID=5573345"&gt;Autodesk page&lt;/a&gt; has the required screenshots for this.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Give your Users account Full Control to the "C:\C_Dilla" folder and sub-folders.&lt;/li&gt;&lt;/ol&gt;This definitely fixes the problem while starting 3ds Max. But we were still having major problems while closing 3ds for which I suggest following solution. It turns out that 3ds Max needs to write to the location where it was installed and some sub-folders [UI sub-folder in "\Program Files\3dsmax42\" to be precise].&lt;br /&gt;&lt;br /&gt;[&lt;span style="font-style: italic;"&gt;Disclaimer: This solution is actually a crappy workaround that shows how poorly some applications are developed in a manner that reduces security on a Windows PC&lt;/span&gt;].&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Log in as Administrator to your Windows PC.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Open Windows Explorer.&lt;/li&gt;&lt;li&gt;Scroll down to your Program Files folder [most probably "C:\Program Files\" or "D:\Program Files\"] and expand it.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Find the "3dsmax42" folder. [Providing access only to the UI sub-folder was not sufficient. Don't know why.]&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Right click on it and select Properties. Click on the Security tab.&lt;/li&gt;&lt;li&gt;Select the Users group and give Full Access to this group [and weep a little].&lt;/li&gt;&lt;li&gt;Log off and log on as regular user. Start 3ds Max and watch it open and close like it is supposed to.&lt;/li&gt;&lt;/ol&gt;I don't have access to the latest 3ds Max and don't know if they have fixed this problem. If yes then do let me know. And more importantly if this does not work for you then please leave me a comment and I will look into it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7274961-4562471686344400391?l=ossandcad.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/SK-VliU0zbU89ODsBAIPSm7X8I8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SK-VliU0zbU89ODsBAIPSm7X8I8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/SK-VliU0zbU89ODsBAIPSm7X8I8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SK-VliU0zbU89ODsBAIPSm7X8I8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=Q3bfwEe0"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?i=Q3bfwEe0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=QRNGbX7f"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/ossandcad?a=JaXK6yRF"&gt;&lt;img src="http://feeds.feedburner.com/~f/ossandcad?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ossandcad/~4/owej-f3b7bk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ossandcad.blogspot.com/feeds/4562471686344400391/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ossandcad.blogspot.com/2006/10/run-3ds-max-as-regular-user.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/4562471686344400391?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7274961/posts/default/4562471686344400391?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ossandcad/~3/owej-f3b7bk/run-3ds-max-as-regular-user.html" title="Run 3ds Max as regular user" /><author><name>Ganeshram Iyer</name><uri>http://www.blogger.com/profile/09189272659983924981</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="15240405801582043438" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://ossandcad.blogspot.com/2006/10/run-3ds-max-as-regular-user.html</feedburner:origLink></entry></feed>
