<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>WinForms</title><link>https://www.dotnetzone.gr:443/cs/forums/12/ShowForum.aspx</link><description>Θέματα για rich client / windows εφαρμογές, σε οποιαδήποτε γλώσσα (VB.NET, C#, managed C++, κ.α.)</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Re: Form.NET ΣΕ VB6</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/3447.aspx</link><pubDate>Wed, 13 Jul 2005 06:57:50 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:3447</guid><dc:creator>gmlogic</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/3447.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=3447</wfw:commentRss><description>&lt;p&gt;&lt;font style="BACKGROUND-COLOR: #efefef"&gt;Παιδιά σας ευχαριστώ πολύ&lt;br /&gt;για την προτασή σας και τό κόπο σας &lt;br /&gt;Θα το κοιτάξω&lt;br /&gt;&lt;img src="/forums//emoticons/emotion-2.gif" alt="Big Smile" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;</description></item><item><title>Re: Form.NET ΣΕ VB6</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/3444.aspx</link><pubDate>Wed, 13 Jul 2005 03:37:20 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:3444</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/3444.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=3444</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;table width="85%"&gt;&lt;tr&gt;&lt;td class="txt4"&gt;&lt;img src="/forums/Themes/default/images/icon-quote.gif"&gt;&amp;nbsp;&lt;strong&gt;gcapnias wrote:&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="quoteTable"&gt;&lt;table width="100%"&gt;&lt;tr&gt;&lt;td width="100%" valign="top" class="txt4"&gt;&lt;font face="Georgia" size="2"&gt;&lt;br /&gt;...&lt;br /&gt;Το δεύτερο, που πρέπει να γίνει εδώ, είναι στα Properties του VB.NET project στο Configuration Properties / Build να τσεκάρεις το Register for COM Interop.&lt;br /&gt;...&lt;br /&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/BLOCKQUOTE&gt;&lt;br /&gt;&lt;br /&gt;Θέλει λίγη προσοχή αυτό το σημείο. (Γιώργο δεν έχω δει τον κώδικά σου, απλά το θίγω για λόγους πληρότητας).&lt;br /&gt;Αν ενεργοποιήσεις απλά το "Register for COM Interop" τότε παράγεις ένα component που υποστηρίζει μόνο late binding, δηλαδή δεν θα παραχθεί το dual interface που απαιτείται για την υποστήριξη του early binding. &lt;br /&gt;Γι αυτόν το λόγο χρειάζεται να κάνεις δύο πράγματα. Το πρώτο είναι να δηλώσεις explicitly (και κατόπιν να υλοποιήσεις μέσα στην κλάση) το interface. &lt;br /&gt;Το δεύτερο και σημαντικότερο είναι να κάνεις assign κάποιo συγκεκριμένo UUID για το interface και DispId για τα τμήματα του Interface, δηλαδή να επιβάλεις προγραμματιστικά το binary compatibility (hello VC++ developers). Αν δεν το κάνεις αυτό και αρκεστείς μόνο στο πρώτο βήμα, αν τυχόν ξανακάνεις compile το .NET project σου, τότε θα σπάσει το compatibility και όπου έχεις παίξει με early binding θα έχεις errors ενώ όπου έχεις παίξει με late binding (μιας και εκεί χρειάζεται μόνο το όνομα) δεν θα έχεις πρόβλημα. &lt;br /&gt;Τέλος, το attribute AssemblyDescription στο AssemblyInfo.vb είναι χρήσιμο γιατί ότι βάλεις εκεί θα το βρεις στη λίστα με τις περιγραφές των COM components που θα βάλεις reference. Επίσης,&amp;nbsp;&lt;strong&gt;μόνο αν έχεις δηλώσει και υλοποιήσει explicitly ένα interface&lt;/strong&gt; όπως είπαμε,&amp;nbsp;θα πρέπει να χρησιμοποιήσεις και το attribute ClassInterface όπου θα του δώσεις την τιμή ClassInterfaceType.None. Με αυτόν τον τρόπο θα εμποδίσεις τον type library exporter να παράγει και να δηλώσει ένα IDispatch interface ως default interface και θα χρησιμοποιηθεί αντ' αυτού το δικό σου.&lt;br /&gt;&lt;br /&gt;Αν όλα τα παραπάνω φαίνονται κινέζικα ή εξαιρετικά δύσκολα στην υλοποίηση - έχω μια υποψία ότι για να δηλώσεις το πλήρες interface μιας κλάσης που αντιστοιχεί σε φόρμα είναι ένα μικρό πρόβλημα - τότε πρόσεξε το εξής: Άπαξ και φτιάξεις μια φορά το component σε VB.NET και μετά το χρησιμοποιήσεις από VB6, αν κάνεις recompile το component, τότε θα πρέπει να το ξανακάνεις reference μέσα από την VB6.</description></item><item><title>Re: Form.NET ΣΕ VB6</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/3442.aspx</link><pubDate>Wed, 13 Jul 2005 02:40:45 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:3442</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/3442.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=3442</wfw:commentRss><description>&lt;font face="Georgia" size="2"&gt;Εδώ σου έχω ένα παράδειγμα,&amp;nbsp;σαν συννημένο στο&amp;nbsp;μύνημα&amp;nbsp;&lt;img src="/forums//emoticons/emotion-2.gif" alt="Big Smile" /&gt;&lt;br /&gt;&lt;br /&gt;Μερικά λόγια για το πως παίζει:&lt;br /&gt;&lt;br /&gt;Για να μπορέσω να δείξω μια φόρμα VB.NET από μια VB6, σκέφτηκα να φτιάξω ένα .ΝΕΤ Assembly - Class Library&amp;nbsp;και να την ενσωματτώσω σε αυτό,&amp;nbsp;αφού μπορώ για αυτό να φτιάξω ένα COM Wrapper - να μπορεί να το χειριστεί κάποιος από COM, δηλαδή και VB6.&lt;br /&gt;&lt;br /&gt;Μέσα στο directory vbnetclass του συννημένου αρχείου είναι ένα setup για το VB.NET assembly. Αυτό περιέχει τον κώδικα του VB.NET class και το εκτελέσιμο .dll και το .tlb που χρειάζεται για να το δει όποια COM εφαρμογή. Το project περιέχει μια WinForm και μια Class.&lt;br /&gt;&lt;br /&gt;Το WinForm είναι Friend για να μπορεί κάποιος να το χειριστεί μόνο από το ίδιο assembly. Στο Class έχει μια method (displayClientForm()) που "σηκώνει" την φόρμα στην μνήμη, την δείχνει σαν dialog, περιμένει να φύγει από την οθόνη για να συνεχίσει,&amp;nbsp; και μετά την ξεφορτώνει. &lt;br /&gt;&lt;br /&gt;Αυτό που είναι το σημαντικό εδώ είναι ότι στην μέθοδο έχω προσθέσει μια ιδιότητα, COMVisible(True), για να είναι ορατή μέσω του COM Interface. Πρέπει να έχει γίνει import το System.Runtime.InteropServices.&lt;br /&gt;&lt;br /&gt;Το δεύτερο, που πρέπει να γίνει εδώ, είναι στα Properties του VB.NET project στο Configuration Properties / Build να τσεκάρεις το Register for COM Interop.&lt;br /&gt;&lt;br /&gt;Μετά την εγκατάσταση του NET component στο client, μέσα από το VB6 project, στα references του project, προσθέτεις το .tlb που έχει φτιάξει για σένα, είναι μέσα στο directory που έχει εγκατασταθεί το .dll με το VB.NET assembly. Από κει και πέρα όλα θεωρώ ότι είναι απλά.&lt;br /&gt;&lt;br /&gt;Μέσα στο directory vbproject που είναι μέσα στο συννημένο είναι ο κώδικας του VB6 project που κάνει χρήση του VB.NET Assembly.&lt;br /&gt;&lt;br /&gt;Ελπίζω να βοήθησα,&lt;br /&gt;George J.&lt;br /&gt;&lt;/font&gt;</description></item><item><title>Form.NET ΣΕ VB6</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/3420.aspx</link><pubDate>Mon, 11 Jul 2005 23:22:50 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:3420</guid><dc:creator>gmlogic</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/3420.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=3420</wfw:commentRss><description>&lt;p&gt;Επειδή θέλω να συνεχίσω σε .net μπορώ να φτιάξω μία form σε .net να την κάνω&lt;br /&gt;πχ control και να την ενσωματόσω στη VB6&lt;br /&gt;&lt;img src="/forums//emoticons/emotion-40.gif" alt="[^o)]" /&gt;&lt;br /&gt;Ευχαριστω&lt;/p&gt;</description></item></channel></rss>