Initial Commit of the PDM project (ready for DWS migration)
This commit is contained in:
234
documentation/api_extracted/CSharpAddIns.htm
Normal file
234
documentation/api_extracted/CSharpAddIns.htm
Normal file
@@ -0,0 +1,234 @@
|
||||
<html xmlns:v="urn:schemas-microsoft-com:vml"
|
||||
xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:w="urn:schemas-microsoft-com:office:word"
|
||||
xmlns="http://www.w3.org/TR/REC-html40">
|
||||
|
||||
<head>
|
||||
<title>Creating Add-ins (C#)</title>
|
||||
<meta http-equiv="Content-Language" content="en-us">
|
||||
<meta name=MS-HKWD content="C# add-ins, debug ">
|
||||
<meta name=MS-HKWD content="Add-ins, C#">
|
||||
<meta name=MS-HKWD content="Add-ins">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
|
||||
<link rel="stylesheet" type="text/css" href="ApiHelp.css">
|
||||
</head>
|
||||
|
||||
<h1><span style="font-weight: normal; font-size: 7.5pt;">SOLIDWORKS PDM Professional API Help</span></h1>
|
||||
<h1>Creating Add-ins (C#)</h1>
|
||||
|
||||
<body bgcolor=white lang=SV link=blue vlink=purple style='tab-interval:65.2pt'>
|
||||
|
||||
<div class=Section1>
|
||||
|
||||
<p><span lang=EN-US style='font-family:Verdana'>This topic shows how to create a
|
||||
debug add-in using Visual C# in Microsoft Visual Studio. <br>
|
||||
<br>
|
||||
</span><span lang="en-us"><b><span style="font-family: Verdana">NOTE: </span></b></span>
|
||||
<span lang=EN-US style='font-family:Verdana;
|
||||
mso-ansi-language:EN-US'>Because SOLIDWORKS PDM Professional cannot force a reload of
|
||||
add-ins if they are written in .NET, all client machines must be restarted to ensure that the latest version of the add-in is used.<o:p></o:p></span></p>
|
||||
|
||||
<ol class="kadov-P" style="line-height: 150%; font-family: Verdana; font-size: 8pt; margin-bottom: 15">
|
||||
<li class="kadov-P"><font face="Verdana" style="font-size: 8pt">
|
||||
<span lang=EN-US style='mso-ansi-language:EN-US'>Start Microsoft Visual
|
||||
Studio or another version that supports debugging.<br>
|
||||
</span></font></li>
|
||||
<li class="kadov-P"><span lang="en-us"><font face="Verdana">Click <b>File >
|
||||
New > Project > Visual C# > Windows<span lang="sv"> Desktop</span> > Class Library</b></span><b>
|
||||
(.NET Framework)</b><span lang="en-us">.<br>
|
||||
</span></font></li>
|
||||
<li class="kadov-P"><span lang="en-gb"><font face="Verdana">In the <b>.NET Framework</b> dropdown at the top of the
|
||||
New Project dialog, keep the default version (recommended) or select
|
||||
<span lang="sv">.NET Framework 4.5 or later</span>. See <a href="Using_NET_Framework_in_Addins.htm">Using .NET
|
||||
Framework for Add-in Applications</a> for more information.</font></span><span lang="en-us"><font face="Verdana"><br>
|
||||
</font></span></li>
|
||||
<li class="kadov-P"><font face="Verdana" style="font-size: 8pt">
|
||||
<span lang=EN-US style='mso-ansi-language:EN-US'>Type the name of your
|
||||
project in <b>Name</b>.<br>
|
||||
</span></font></li>
|
||||
<li class="kadov-P"><span lang="en-us"><font face="Verdana">Click <b>
|
||||
Browse</b> and navigate to the folder where to create your project.<br>
|
||||
</font></span></li>
|
||||
<li class="kadov-P"><span lang="en-us"><font face="Verdana">Click <b>OK</b>.<br>
|
||||
<br>
|
||||
<b>Class1.cs</b> containing empty class, Class1, is created.<br>
|
||||
</font></span></li>
|
||||
<li class="kadov-P">Right-click the project name in the Solution Explorer and click
|
||||
<b>Add > Reference</b>.<br> <ol class="kadov-P" style="line-height: 150%; font-family: Verdana; font-size: 8pt; margin-bottom: 15">
|
||||
<li>Click <b>Browse </b>in the left-hand panel, navigate to and select
|
||||
<strong>EPDM.Interop.epdm.dll</strong>, and click <strong>OK</strong>.<br></li>
|
||||
<li><span lang="en-us">Right-click <b>E</b></span><b>pdm.Interop.epdm</b><span lang="en-us"> in the Solution Explorer,
|
||||
select <b>Properties</b>, and set <b>Embed Interop Types</b> to <b>False</b>
|
||||
to handle methods that pass arrays of structures.</span><br> </li>
|
||||
<li>Click <b>Assemblies > Framework</b> in the left-hand panel,
|
||||
select
|
||||
<b>System.Windows.Forms</b>, and click <strong>OK</strong>.<br> </li>
|
||||
<li>Click <b>Close</b>.</li>
|
||||
</ol></li>
|
||||
<li class="kadov-P">Right-click the project name in the Solution Explorer and
|
||||
click <b>Properties.</b><span lang=EN-US style='mso-ansi-language:EN-US'><br> </span><ol class="kadov-P" style="line-height: 150%; font-family: Verdana; font-size: 8pt; margin-bottom: 15">
|
||||
<li><span lang=EN-US style='mso-ansi-language:EN-US'>Click <b>Application > Assembly Information</b>.<br>
|
||||
</span></li>
|
||||
<li><span lang="en-us">De-select</span><span lang=EN-US style='mso-ansi-language:EN-US'>
|
||||
<b>Make assembly COM-Visible</b>.<br>
|
||||
</span></li>
|
||||
<li><span lang="en-us">On the </span>Build<span lang="en-us"> tab, </span>
|
||||
select <strong>AnyCPU</strong> for the target platform, de-select
|
||||
<strong>Prefer 32-bit</strong> and <span lang="en-us">select <b>Register for COM
|
||||
interop</b>.</span></li>
|
||||
</ol></li>
|
||||
<li><span lang="en-us">Make this </span>
|
||||
<span lang=EN-US style='mso-ansi-language:EN-US'>a Debug Add-in:<br> </span><ol style="font-family: Verdana; font-size: 8pt">
|
||||
<li><span lang="en-us">Click the <b>Debug</b> tab.<br> </span></li>
|
||||
<li><span lang="en-us">Click </span>
|
||||
<span lang=EN-US style='mso-ansi-language:EN-US'><b>Start external program
|
||||
</b>and<b> </b>type
|
||||
<b>C:\Windows\System32\notepad.exe </b>in the text field.</span></li>
|
||||
</ol>
|
||||
<p> </li>
|
||||
<li><span lang="en-us">If creating this add-in on a 64-bit computer, edit
|
||||
</span><span lang=EN-US style='mso-ansi-language:EN-US'>
|
||||
<i style='mso-bidi-font-style:
|
||||
normal'>project_path</i><span style='mso-bidi-font-style:
|
||||
normal; '><i>\</i></span></span><span style='mso-bidi-font-style:
|
||||
normal; mso-ansi-language:EN-US' lang="EN-US"><i>project_name\project_name\</i></span><span lang="en-us"><i>project_name</i>.<b>csproj</b>
|
||||
in Notepad:<br> </span><ol style="font-family: Verdana; font-size: 8pt">
|
||||
<li><span lang="en-us">Insert the following line below <b><PropertyGroup
|
||||
Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "></b> and
|
||||
below <b><PropertyGroup Condition=" '$(Configuration)|$(Platform)' ==
|
||||
'Release|AnyCPU' "></b>.<br><br><font face="Courier New" size="2"><PlatformTarget>AnyCPU</PlatformTarget><br> </font></span></li>
|
||||
<li><span lang="en-us">Save the file and exit Notepad.</span></li>
|
||||
</ol> </li>
|
||||
<li class="kadov-P"><font face="Verdana">Double-click <b>Class1.cs</b> in the Solution Explorer
|
||||
to open the code window.<br> </font></li>
|
||||
<li class="kadov-P">At the top of the code window, type:<br><br>
|
||||
<font color="#0000FF" size="2" face="Courier New">using</font><font face="Courier New"><font size="2"> System.Windows.Forms;<br>
|
||||
</font>
|
||||
<span style="color:blue;"><font size="2">using</font></span><font size="2"> System.Runtime.InteropServices;<br>
|
||||
</font></font><font color="#0000FF" size="2" face="Courier New">using</font><font face="Courier New"><span
|
||||
style='mso-bidi-font-style:normal; mso-ansi-language:EN-US' lang="EN-US"><font size="2">
|
||||
E<span lang="sv">PDM.Interop.epdm</span>;</font></span></font><span lang=EN-US style='mso-ansi-language:EN-US'><br> </span></li>
|
||||
<li>
|
||||
<p class=section1 style='margin:0in;margin-bottom:.0001pt'>
|
||||
<font face="Verdana">Replace<b>: </b></font></p></li>
|
||||
<pre style="font-family: Courier New; font-size: 13; color: black; background: white"><span style="color:blue;">public</span> <span style="color:blue;">class</span> <span style="color:#2b91af;">Class1</span></pre>
|
||||
<p class=section1 style='margin:0in;margin-bottom:.0001pt'>
|
||||
<font face="Verdana"><b> </b>with:</font></p>
|
||||
<p class=section1 style='margin:0in;margin-bottom:.0001pt'>
|
||||
<font face="Verdana"><br></font><font face="Courier New" size="2">[<span style="color:#2b91af;">Guid</span>(<span style="color:#a31515;">""</span>),
|
||||
<span style="color:#2b91af;">ComVisible</span>(<span style="color: #0000FF">t</span><span style="color:blue;">rue</span>)]</font></p>
|
||||
<p style="font-family: Courier New; font-size: 13; color: black; background: white" class="APICODE">
|
||||
<span style="color:blue;">public</span> <span style="color:blue;">class</span> <span style="color:#2b91af;">Class1</span> : <span style="color:#2b91af;">IEdmAddIn5</span><li>To populate the GUID
|
||||
attribute above, click <b>Tools > Create GUID</b> in the IDE, select GUID
|
||||
Format 5, click <b>Copy</b>, and click <b>Exit</b>. Populate
|
||||
<font face="Courier New" size="2">[<span style="color:#2b91af;">Guid</span>(<span style="color:#a31515;">""</span>),
|
||||
...]</font> with the copied string.<br> </li>
|
||||
<li><font face="Verdana"><span style="font-size: 8pt" lang="en-us">Implement</span></font><span lang=EN-US style='mso-ansi-language:EN-US'><span style="font-size: 8pt"><font face="Verdana">
|
||||
<a href="EPDM.Interop.epdm~EPDM.Interop.epdm.IEdmAddin5~GetAddInInfo.html">IEdmAddIn</a></font></span><span
|
||||
style='mso-bidi-font-style:normal'><font face="Verdana"><span style="font-size: 8pt"><a href="EPDM.Interop.epdm~EPDM.Interop.epdm.IEdmAddin5~GetAddInInfo.html">5::GetAddInInfo</a>
|
||||
<span lang="sv">by adding the following to Class1</span>:<br> </span></font></span></span><p style="font-family: Courier New; font-size: 13; color: black; background: white" class="APICODE">
|
||||
<span style="color:blue;"> public</span> <span style="color:blue;">void</span> GetAddInInfo(<span style="color:blue;">ref</span> <span style="color:#2b91af;">EdmAddInInfo</span> poInfo, <span style="color:#2b91af;">IEdmVault5</span> poVault, <span style="color:#2b91af;">IEdmCmdMgr5</span> poCmdMgr)<br> {<br> <span style="color: green">//Specify
|
||||
information to display in the add-in's Properties dialog box</span><br> poInfo.mbsAddInName = <span style="color:#a31515;">"C# Add-in"</span>;<br> poInfo.mbsCompany = <span style="color:#a31515;">"My Company"</span>;<br> poInfo.mbsDescription = <span style="color:#a31515;">"Menu add-in that shows a message box."</span>;<br> poInfo.mlAddInVersion = 1;<br> <br> <span style="color: #008000; background-position: 0 0">//Specify
|
||||
the minimum required version of S</span><span style="color: green">olidWorks PDM
|
||||
Professional</span><br> poInfo.mlRequiredVersionMajor = 6;<br> poInfo.mlRequiredVersionMinor = 4;<br> <br> <span style="color:green;">// Register a menu command</span><br> poCmdMgr.AddCmd(1, <span style="color:#a31515;">"C# Add-in"</span>, (<span style="color:blue;">int</span>)<span style="color:#2b91af;">EdmMenuFlags</span>.EdmMenu_Nothing);<br> <br> }</li>
|
||||
<li><span lang="en-us">Implement
|
||||
<a href="EPDM.Interop.epdm~EPDM.Interop.epdm.IEdmAddIn5~OnCmd.html">IEdmAddIn5::</a></span><span lang=EN-US style='mso-ansi-language:EN-US'><span
|
||||
style='mso-bidi-font-style:normal'><a href="EPDM.Interop.epdm~EPDM.Interop.epdm.IEdmAddIn5~OnCmd.html">OnCmd</a>
|
||||
<span lang="sv">by adding the following to Class1</span>:</span></span></li><blockquote>
|
||||
<p style="font-family: Courier New; font-size: 13; color: black; background: white" class="APICODE">
|
||||
<span style="color:blue;">public</span> <span style="color:blue;">void</span> OnCmd(<span style="color:blue;">ref</span> <span style="color:#2b91af;">EdmCmd</span> poCmd, <span style="color:blue;">ref</span> <span style="color:#2b91af;">EdmCmdData</span>[] ppoData)<br>
|
||||
{<br> <br> <span style="color:green;">// Handle the menu command</span><br> <span style="color:blue;">if</span> (poCmd.meCmdType == <span style="color:#2b91af;">EdmCmdType</span>.EdmCmd_Menu)<br> {<br> <span style="color:blue;">if</span> (poCmd.mlCmdID == 1)
|
||||
{<br> System.Windows.Forms.<span style="color:#2b91af;">MessageBox</span>.Show(<span style="color:#a31515;">"C# Add-in"</span>);<br> }<br> }<br>
|
||||
}</p>
|
||||
</blockquote>
|
||||
<li class="kadov-P">Implement your own window handle wrapper by
|
||||
right-clicking the project name in the Solution Explorer and clicking <b>Add > Class</b></span><span lang="en-us">:<br> </span><ol style="font-family: Verdana; font-size: 8pt">
|
||||
<li><span lang="en-us">Type <b>WindowHandle.cs</b> in <b>Name</b>.<br> </span></li>
|
||||
<li><span lang="en-us">Click <b>Add</b>.<br> </span></li>
|
||||
<li><span lang="en-us">Replace the code in the code window with the
|
||||
following code.</span></li>
|
||||
</li>
|
||||
</ol>
|
||||
<blockquote>
|
||||
<blockquote>
|
||||
<p style="font-family: Courier New; font-size: 13; color: black; background: white" class="APICODE">
|
||||
<span style="color:blue;">using</span> System;<br>
|
||||
<span style="color:blue;">using</span> System.Collections.Generic;<br>
|
||||
<span style="color:blue;">using</span> System.Text;<br>
|
||||
<span style="color:blue;">using</span> System.Windows.Forms;<br> <br>
|
||||
<span style="color:blue;">namespace</span> Addin_CSharp<br>{<br> <span style="color:green;">//Wrapper class to use SOLIDWORKS PDM Professional as the parent window</span><br> <span style="color:blue;">class</span> <span style="color:#2b91af;">WindowHandle</span> : <span style="color:#2b91af;">IWin32Window</span><br> {<br> <span style="color:blue;">private</span> <span style="color:#2b91af;">IntPtr</span> mHwnd;<br> <br> <span style="color:blue;">public</span> WindowHandle(<span style="color:blue;">int</span> hWnd)<br> {<br> mHwnd = <span style="color:blue;">new</span> <span style="color:#2b91af;">IntPtr</span>(hWnd);<br> }<br> <span style="color:blue;">public</span> <span style="color:#2b91af;">IntPtr</span> Handle<br> {<br> <span style="color:blue;">get</span> { <span style="color:blue;">return</span> mHwnd; }<br> }<br> }<br>}</p>
|
||||
</blockquote>
|
||||
<p><span lang="en-gb">Your add-in uses the new wrapper in the menu
|
||||
command handler to
|
||||
show the message box by calling <font face="Courier New" size="2">System.Windows.Forms.MessageBox.Show</font> in Class1::OnCmd in
|
||||
<b>Class1.cs</b>.</span></p>
|
||||
</blockquote>
|
||||
<li><span lang=EN-US style='mso-ansi-language:EN-US'>Click <b>Build > Build
|
||||
Solution</b> to build the add-in.<br> </span></li>
|
||||
<li><span lang="en-us">I</span><span lang=EN-US style='mso-ansi-language:EN-US'>nstall
|
||||
the add-in for debugging through the SOLIDWORKS PDM Professional
|
||||
Administration tool: <br> </span><ol style="font-family: Verdana; font-size: 8pt">
|
||||
<li><span lang="en-us">Open</span><span lang=EN-US style='mso-ansi-language:EN-US'> the SOLIDWORKS
|
||||
PDM Professional Administration tool.<br> </span></li>
|
||||
<li><span lang=EN-US style='mso-ansi-language:EN-US'>Expand the vault where
|
||||
you want to install this add-in and log in as Admin.<br> </span></li>
|
||||
<li><span lang="en-us">Right-click <b>Add-ins</b> and select <b>Debug
|
||||
Add-ins</b>.<br> </span></li>
|
||||
<li><span lang="en-us">Click <b>Add Add-in</b>, browse to </span>
|
||||
<span lang=EN-US style='mso-ansi-language:EN-US'>
|
||||
<i style='mso-bidi-font-style:
|
||||
normal'>project_path</i><span style='mso-bidi-font-style:
|
||||
normal; '><i>\</i></span></span><span style='mso-bidi-font-style:
|
||||
normal; mso-ansi-language:EN-US' lang="EN-US"><i>project_name\project_name</i><b>\bin\Debug</b>,
|
||||
click <i>project_name</i><b>.dll</b>, and click <b>Open</b>.<br><br>Your add-in's name, path, and class ID should appear in
|
||||
the <b>Add-ins installed
|
||||
for debugging on this machine </b>list.<br> </span></li>
|
||||
<li><span lang="en-us">Click <b>OK</b>.</span><span lang=EN-US style='mso-ansi-language:EN-US'><br> </span></li>
|
||||
</ol></li>
|
||||
<li>In Microsoft Visual Studio, click <b>Debug > Start Debugging</b>
|
||||
or press F5.<br> </li>
|
||||
<li>Open Notepad and click <b>File > Open</b>.<br> </li>
|
||||
<li>In the Open dialog, click the name of the vault where you installed this add-in.<br> </li>
|
||||
<li>Right-click inside the vault view and click <b>C#
|
||||
Add-in</b>.<br><br>Displays the message, <b>C# Add-in</b>.<br> </li>
|
||||
<li>Click <b>OK</b> to close the message box.<br> </li>
|
||||
<li>Click <b>Cancel</b>.<br> </li>
|
||||
<li>Close Notepad.<h2><b style='mso-bidi-font-weight:normal'>
|
||||
<span lang=EN-US
|
||||
style='font-family:Verdana;mso-ansi-language:EN-US'>
|
||||
<span style="font-size: 8pt">Complete
|
||||
Source Code</span><o:p></o:p></span></b></h2>
|
||||
<blockquote>
|
||||
<h4><span style="font-family: Verdana; font-weight: 700" lang="en-gb">
|
||||
<font color="#008000">//Class1.cs</font></span></h4>
|
||||
<p style="font-family: Courier New; font-size: 13; color: black; background: white" class="APICODE">
|
||||
<br>
|
||||
<span style="color:blue;">using</span> System;<br>
|
||||
<span style="color:blue;">using</span> System.Collections;<br>
|
||||
<span style="color:blue;">using</span> System.Collections.Generic;<br>
|
||||
<span style="color:blue;">using</span> System.Data;<br>
|
||||
<span style="color:blue;">using</span> System.Diagnostics;<br>
|
||||
<span style="color:blue;">using</span> System.Windows.Forms;<br>
|
||||
<span style="color:blue;">using</span> System.Runtime.InteropServices;<br>
|
||||
<span style="color:blue;">using</span> EPDM.Interop.epdm;<br> <br>[<font face="Courier New" size="2"><span style="color:#2b91af;">Guid</span>(<span style="color:#a31515;">""</span>),
|
||||
<span style="color:#2b91af;">ComVisible</span>(<span style="color: #0000FF">t</span><span style="color:blue;">rue</span>)]
|
||||
<font color="#008000">// See step 14 above to create the GUID</font></font><br>
|
||||
<span style="color:blue;">public</span> <span style="color:blue;">class</span> <span style="color:#2b91af;">Class1</span> : <span style="color:#2b91af;">IEdmAddIn5</span><br>{<br> <br> <span style="color:blue;">public</span> <span style="color:blue;">void</span> GetAddInInfo(<span style="color:blue;">ref</span> <span style="color:#2b91af;">EdmAddInInfo</span> poInfo, <span style="color:#2b91af;">IEdmVault5</span> poVault, <span style="color:#2b91af;">IEdmCmdMgr5</span> poCmdMgr)<br> {<br> <br> poInfo.mbsAddInName = <span style="color:#a31515;">"C# Add-in"</span>;<br> poInfo.mbsCompany = <span style="color:#a31515;">"My Company"</span>;<br> poInfo.mbsDescription = <span style="color:#a31515;">"Menu add-in that shows a message box."</span>;<br> poInfo.mlAddInVersion = 1;<br>
|
||||
<br> poInfo.mlRequiredVersionMajor = 6;<br> poInfo.mlRequiredVersionMinor = 4;<br> <br> poCmdMgr.AddCmd(1, <span style="color:#a31515;">"C# Add-in"</span>, (<span style="color:blue;">int</span>)<span style="color:#2b91af;">EdmMenuFlags</span>.EdmMenu_Nothing);<br> <br> }<br> </p>
|
||||
<p style="font-family: Courier New; font-size: 13; color: black; background: white" class="APICODE">
|
||||
<span style="color:blue;"> public</span> <span style="color:blue;">void</span> OnCmd(<span style="color:blue;">ref</span> <span style="color:#2b91af;">EdmCmd</span> poCmd, <span style="color:blue;">ref</span> <span style="color:#2b91af;">EdmCmdData</span>[] ppoData)<br> {<br> <br> <span style="color:blue;">if</span> (poCmd.meCmdType == <span style="color:#2b91af;">EdmCmdType</span>.EdmCmd_Menu)<br> {<br> <span style="color:blue;">if</span> (poCmd.mlCmdID == 1)<br> {<br> System.Windows.Forms.<span style="color:#2b91af;">MessageBox</span>.Show(<span style="color:#a31515;">"C# Add-in"</span>);<br> }<br> }<br> }<br>}</p>
|
||||
<h4 style="font-family: Courier New; font-size: 13; background: white">
|
||||
<font color="#008000">//WindowHandle.cs</font></h4>
|
||||
<p style="font-family: Courier New; font-size: 13; color: black; background: white" class="APICODE">
|
||||
<span style="color:blue;">using</span> System;<br>
|
||||
<span style="color:blue;">using</span> System.Collections.Generic;<br>
|
||||
<span style="color:blue;">using</span> System.Text;<br>
|
||||
<span style="color:blue;">using</span> System.Windows.Forms;<br> <br>
|
||||
<span style="color:blue;">namespace</span> Addin_CSharp<br>{<br> <span style="color:blue;">class</span> <span style="color:#2b91af;">WindowHandle</span> : <span style="color:#2b91af;">IWin32Window</span><br> {<br> <span style="color:blue;">private</span> <span style="color:#2b91af;">IntPtr</span> mHwnd;<br> <br> <span style="color:blue;">public</span> WindowHandle(<span style="color:blue;">int</span> hWnd)<br> {<br> mHwnd = <span style="color:blue;">new</span> <span style="color:#2b91af;">IntPtr</span>(hWnd);<br> }<br> <span style="color:blue;">public</span> <span style="color:#2b91af;">IntPtr</span> Handle<br> {<br> <span style="color:blue;">get</span> { <span style="color:blue;">return</span> mHwnd; }<br> }<br> }<br>}</p>
|
||||
</blockquote></li>
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
Reference in New Issue
Block a user