Jag har programmerat en del COM i Visual C++, men vill nu jobba i C# istället. .Net och C# är frånkopplat från COM och teknikerna skiljer sig avsevärt. kort, hur gör jag? Om du vill importera COM komponenter i .net så får du använda ett annat verktyg. Om du vill skapa COM objekt i C# så skall du börja med att ärva ifrån System.EnterpriseServices.ServicedComponent com är inte COM+ dvs för att exponera till com behöver du inte ärva från ngt. Det räcker att skapa en Com Callable Wrapper. Du behöver inte ha de attributen om du är nöjd med default inställningarna. Nu vill Onkelborg också plocka fram pekpinnen! Ja du har rätt i att COM inte är COM+ , på något sätt fick jag in ett + när jag läste inlägget. Hopp då tar vi en vila från pajkastning och säger snälla saker istället :-) Så jag ska inte göra som Morgan Persson säger i sitt första meddelande om jag ska implementera en COM-server utifrån ett färdigt IDL?Generera COM-objekt i C#
I Visual C++ kan man generera COM-objekten m.h.a. guider urifrån färiga IDL-filer. Hur gör man motsvarande i C#?Sv: Generera COM-objekt i C#
Com är inte dött, men .NET använder det inte.
Dock kan du låta .net kommunicera med COM om det är ett krav genom att skapa så kallade Com Callable Wrappers till dina .net dller.
Det gör du med tlbexp.exe oeh / elller regasm.exe. Sv:Generera COM-objekt i C#
Jag har försökt köra båda dessa program mot dll- och idl-filer jag har med COM-interfacenSv: Generera COM-objekt i C#
TlbImp.exe Sv: Generera COM-objekt i C#
På klassen sätter du sedan attributet System.Runtime.InteropServices.ClassInterfaceAttribute
De metoder du vill exponera via COM dekorerar du med attributet System.Runtime.InteropServices.ComVisibleAttribute
True = Synlig i COM
Sen så tycker jag det är lämpligt att sätta ett par attribut i Assemblyinfo
EnterpriseServices.ApplicationActivation , EnterpriseServices.ApplicationAccessControl och EnterpriseServices.ApplicationName
Du måste också ha ett strongname för din komponent, det skapar du mha sn.exeNär/om du ska installera komponenten så behöver du köra regsvcs.exe och gacutil.exe på din dll.Sv: Generera COM-objekt i C#
Eftersom COM inte är COM+ så har exponering till com heller inget med Enterprise services att göra
.net använder inte com överhuvudtaget om du inte ber .net att göra det.
*mer pekpinne*Sv: Generera COM-objekt i C#
Andreas: nu har du väl gjort Svenska Akademien (stavas?) upprörd? :)
Ditt påstående tyder på att det finns två eller flera personer varav Patrik är den rätta personen. Antagligen har du gjort en tankevurpa och bytt ut "har" mot "är".
Ps.
Det är fritt fram att hitta svenskafel i mitt inlägg :) *Kunde inte låta bli att peta lite på tråden*
Ds.Sv:Generera COM-objekt i C#
Fast jag hävdar fortfarande att .Net använder COM, se tex http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnreal/html/realworld06012004.asp
Första bilden i artikeln ovan tolkar jag som att .NET använder COM, men vi kanske inte pratar om samma sak ? Jag får försöka bli tydligare.
Det må vara så att den kod du/jag/andra skriver inte använder COM objekt direkt, men klasserna i ramverket använder COM så indirekt gör ju din applikation det också.Sv:Generera COM-objekt i C#
Man kan ju inte har rätt jämt, även om man så gärna vill det... det är modigare att erkänna sina
misstag än att visa att man har rätt då ett misstag är svårare att medge.
Mvh JohanSv: Generera COM-objekt i C#
Är det något jag bör tänka på när jag gör detta (det finns så väldigt mycket att läsa i ämnet, och jag vet inte vad som är viktigt)?