Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Register for COM interop

Postades av 2007-01-06 15:10:52 - Martin Rex, i forum c# (c-sharp), Tråden har 29 Kommentarer och lästs av 1311 personer

Hej !

Jag gör mina första trevande försök i C# (VS2005)
Jag har gjort en klass (DLL) som jag vill referera till i VB6.
Den är väldigt enkel, typ "Hello World" :-)
Problemet är att den inte dyker upp bland referenser och om jag försöker lägga till den får jag felmeddelande :"Can't add reference to specified file"
Jag har registrerat DLL'en med regasm.

Jag har googlat omkring lite och sett att jag ska bocka i en ruta som heter :Register for COM interop.
Denna hittar jag ingen stans, men däremot en som heter : make assembly com-visible. Är det samma sak ?

Kan någon ge mig en knuff i rätt riktning ?

/Martin


Svara

Sv: Register for COM interop

Postades av 2007-01-06 15:26:19 - Martin Adrian

Du vill alltså göra ett program i VB6 som skall använda din C# klass?

Isåfall skall du kryssa i "make assembly com visible".

Men du måste dessutom lägga till lite attribut på din klass.

Prova med följande:

[ComVisibleAttribute(true)]
[ProgId("Minassembly.Minklass")]
[Guid("ABC...")]
[ClassInterface(ClassInterfaceType.AutoDispatch)]
public class minklass {
public int minmetod(int x) { return x*x; }
};

Använd bara vanliga metoder med int som argument och returtyp tills du få det att fungera)

När du kompilerat och registrerat din dll (regasm minassembly.dll) är det lättast att testa med ett litet vbscript program. Skapa en fil test.vbs som innehåller:

Set o = CreateObject("Minassembly.Minklass")
msgbox o.minmetod(1)


Svara

Sv:Register for COM interop

Postades av 2007-01-06 16:50:27 - Martin Rex

Tack för ditt svar !

Var lägger jag dessa attribut ?
Innan NameSpace-noden eller efter min Public Class xxx ?
Finns det inget som heter "Class declaration" i C# ?
Vad ska GUID[ABC...] innehålla?

/Martin


Svara

Sv: Register for COM interop

Postades av 2007-01-06 18:35:21 - Martin Adrian

>Var lägger jag dessa attribut ?

Som i exemplet ovan. Precis innan public class

>Vad ska GUID[ABC...] innehålla?
Ett GUID. Använd guidgen i toolsmenyn


Svara

Sv:Register for COM interop

Postades av 2007-01-06 19:04:17 - Martin Rex

hmmm...får inte till det...

Ser ut så här nu :

<CODE C#> using System; using System.Collections.Generic; using System.Text; namespace TstDll { [ComVisibleAttribute(true)] [ProgId("TstDll.Minklass")] //[Guid("ABC...")] [ClassInterface(ClassInterfaceType.AutoDispatch)] public class minklass { public int minmetod(int x) { return x * x; } } } </CODE>
Får följande fel vid kompilering / Build :

Error 3 The type or namespace name 'ClassInterface' could not be found (are you missing a using directive or an assembly reference?) C:\Documents and Settings\Martin\Lokala inställningar\Application Data\Temporary Projects\ClassLibrary1\Class1.cs 12 6 ClassLibrary1
Error 2 The type or namespace name 'ProgId' could not be found (are you missing a using directive or an assembly reference?) C:\Documents and Settings\Martin\Lokala inställningar\Application Data\Temporary Projects\ClassLibrary1\Class1.cs 10 6 ClassLibrary1
Error 1 The type or namespace name 'ComVisibleAttribute' could not be found (are you missing a using directive or an assembly reference?) C:\Documents and Settings\Martin\Lokala inställningar\Application Data\Temporary Projects\ClassLibrary1\Class1.cs 9 6 ClassLibrary1


Svara

Sv: Register for COM interop

Postades av 2007-01-06 19:36:39 - Simon Dahlbacka

lägg till

using System.Runtime.InteropServices;


Svara

Sv:Register for COM interop

Postades av 2007-01-06 20:16:32 - Martin Rex

Tack !

Nu gick den att kompilera...men...det är samma resultat.
Den går att registrera, men inte lägga som referens till VB6.
Jag hittade inget om GUID i Tools-menyn...kan det vara det som fattas ??


Svara

Sv: Register for COM interop

Postades av 2007-01-06 21:45:19 - Simon Dahlbacka

..har du kommit ihåg att sätta med /tlb flaggan till regasm när du registrerar din dll?


Svara

Sv:Register for COM interop

Postades av 2007-01-06 21:47:18 - Martin Rex

Nix....testar genast..
Regasm filnamn/tlb ?


Svara

Sv: Register for COM interop

Postades av 2007-01-06 22:05:37 - Simon Dahlbacka

C:\Documents and Settings\Simon>regasm
Microsoft (R) .NET Framework Assembly Registration Utility 2.0.50727.42
Copyright (C) Microsoft Corporation 1998-2004. All rights reserved.

Syntax: RegAsm AssemblyName [Options]
Options:
/unregister Unregister types
/tlb[:FileName] Export the assembly to the specified type library
and register it
/regfile[:FileName] Generate a reg file with the specified name
instead of registering the types. This option
cannot be used with the /u or /tlb options
/codebase Set the code base in the registry
/registered Only refer to already registered type libraries
/asmpath:Directory Look for assembly references here
/nologo Prevents RegAsm from displaying logo
/silent Silent mode. Prevents displaying of success messages
/verbose Displays extra information
/? or /help Display this usage message



Svara

Sv:Register for COM interop

Postades av 2007-01-06 22:11:57 - Martin Rex

Ja...nu dök den upp, Tack för det !
Men...

Har följande kod i VB6 :
<CODE>
Private Sub Command1_Click()
Dim tdll As TstDll.minklass
Set tdll = New TstDll.minklass
A = tdll.minmetod(8)
End Sub
</CODE>

Får automation error (80070002) på raden :Set tdll = New TstDll.minklass

Något förslag ?


Svara

Sv: Register for COM interop

Postades av 2007-01-06 22:14:20 - Simon Dahlbacka

hmm, testa lägga till en konstruktor utan parametrar, eventuellt behövs en sån läggas till explicit för att det ska funka..

(har inte vb6 här så jag kan testa)


Svara

Sv: Register for COM interop

Postades av 2007-01-06 22:34:57 - Martin Adrian

80070002 är ett ganska otrevligt meddelande eftersom det kan bero på så många saker.

Prova följande:
1. 80070002 betyder egentligen att någon fil saknas men det är sällan det är så (enligt min erfarenhet). Kolla dock att du inte har angett någon referens i C# projektet som eventuellt inte hittas när din komponent skall laddas. (vill du vara mer avancerad kan du kolla med verktyg som depends och fuslogvw). Om du inte är administratör på datorn kan det också vara bra att kolla med procmon att det inte är något rättighetsproblem som spökar.
2. Som jag skrev ovan bör du först prova med vbscript då det oftast är enklare att få late-binding att fungera (dvs createobject istället för dim as).
3. Prova att registrera med "regasm /codebase". Det skall egentligen inte behövas och du får en varning när du gör det men ibland gör det att det fungerar.
4. Kolla i registret att din klass inte är registrerad flera gånger. (dvs avregistrera din komponent och sök sen i registret efter namnet och den guid du angav)


Svara

Sv:Register for COM interop

Postades av 2007-01-06 22:41:34 - Martin Rex

Martin,

Jag angav ingen guid, eftersom jag inte hittade det i tools-menyn.
Kan det vara problemet ?


Svara

Sv: Register for COM interop

Postades av 2007-01-06 23:10:07 - Simon Dahlbacka

ja

(du kan göra din egen uuidgen som t.ex. som följande, stoppa bara i ett kommandoradprogram och kör, sen ctrl+V, minns inte om .ToString formatet är rätt, eftersom jag använt denna när jag jobbade med WiX)

using System;
using System.Text;
using System.Windows.Forms;

namespace UuidGen {
    class Program {
        [STAThread]
        static void Main(string[] args) {
            string guid = Guid.NewGuid().ToString("D").ToUpper();
            Console.WriteLine(guid);
            Clipboard.SetText(guid, TextDataFormat.Text);
        }
    }
}


Svara

Sv:Register for COM interop

Postades av 2007-01-06 23:25:10 - Martin Rex

men...ärligt talat, KAN det vara så avancerat att skriva en liten DLL ??
Hur ska det då vara att designa ett helt system ?
Det kan väl inte vara möjligt att man måste göra stödprogram bara för att man vill implementera 2-3 kod-rader ?? :-)

Hur som helst, TACK för alla tips och råd.
Jag återkommer säkert i morgon.


Svara

Sv: Register for COM interop

Postades av 2007-01-06 23:54:21 - Martin Rex

Kunde självklart inte låta bli att testa.


På raden : using System.Windows.Forms;
får jag följande fel:

Error 1 The type or namespace name 'Windows' does not exist in the namespace 'System' (are you missing an assembly reference?) C:\Documents and Settings\Martin\Lokala inställningar\Application Data\Temporary Projects\ConsoleApplication1\Program.cs 3 14 ConsoleApplication1

Saknar jag någon "USING" ?


Svara

Sv:Register for COM interop

Postades av 2007-01-07 00:02:45 - Simon Dahlbacka

nej, men du måste sätta till en referens till System.Windows.Forms.dll (för clipboard funktionaliteten)


Svara

Sv: Register for COM interop

Postades av 2007-01-07 01:04:55 - Martin Rex

Gjorde det programmet och klistrade in nyckeln, men samma resultat...

Hittar också nyckeln i "regedit"
Innan dess hade jag kört regasm /u
Sedan regasm /tlb

Fler förslag ???


Svara

Sv:Register for COM interop

Postades av 2007-01-07 13:08:35 - Martin Rex

inte heller med regasm /CodeBase försvinner problemet.
vad kan fattas ?


Svara

Sv: Register for COM interop

Postades av 2007-01-07 13:09:37 - Simon Dahlbacka

testade du sätta till en parameterlös konstruktor?


Svara

Sv:Register for COM interop

Postades av 2007-01-07 13:28:02 - Martin Rex

Nej.
Ska jag vara ärlig så vet jag inte hur en sådan kan se ut.
Har du tid att visa ?


Svara

Sv: Register for COM interop

Postades av 2007-01-07 14:12:32 - Simon Dahlbacka

using System;
using System.Collections.Generic;
using System.Text;


namespace TstDll

{
    [ComVisibleAttribute(true)]
    [ProgId("TstDll.Minklass")]
    [Guid("ABC...")]
    [ClassInterface(ClassInterfaceType.AutoDispatch)]
    
    public class minklass
    {
        public minklass() { 
          //behöver inte göra nåt just nu...
        }
        public int minmetod(int x) { return x * x; }
    }
   

}


Svara

Sv:Register for COM interop

Postades av 2007-01-07 14:39:11 - Martin Rex

Tack...men inte det heller....
Vad kan det vara....jag blir snart tokig...
Jag kan ju se på google att massor av folk har haft samma problem, men jag kan inte se att det har blivit löst.
GÅR det ??


Svara

Sv: Register for COM interop

Postades av 2007-01-07 14:49:03 - Simon Dahlbacka

msdn för ClassInterfaceType.AutoDispatch

<b>Indicates that the class only supports late binding for COM clients.</b>


Svara

Sv:Register for COM interop

Postades av 2007-01-07 14:52:07 - Martin Rex

ja...jag har sett det och har ändrat koden i VB :

<code>
Private Sub Command1_Click()
Dim tdll As TstDll.minklass
Set tdll = CreateObject("tstdll.minklass")
A = tdll.minmetod(8)

End Sub
</code>

men det är ingen skillnad med CreateObject.
För visst är det väl det man ska använda vid late bindings ?


Svara

Sv: Register for COM interop

Postades av 2007-01-07 14:54:41 - Simon Dahlbacka

<b>För visst är det väl det man ska använda vid late bindings ?</b>

..tydligen inte :)

Edit: tydligen ska du "dimma" din tdll as Object och inte nåt annat

dim tdll as object


Svara

Sv:Register for COM interop

Postades av 2007-01-07 15:34:33 - Martin Rex

Det funkar !!!!!
Det verkar inte ha så mycket med Dim, CreateObject etc. att göra.

Däremot verkar det som att DLL och TLB måste finnas i både \windows\system32 och "clientens" hembibliotek.
Man kan ju bli knäpp för mindre :-)

STORT tack till alla er som hjälp till !!!

Mvh
Martin


Svara

Sv: Register for COM interop

Postades av 2007-01-07 15:38:34 - Simon Dahlbacka

då kan du ju gärna markera tråden löst :)


Svara

Sv:Register for COM interop

Postades av 2007-01-07 15:47:10 - Martin Rex

självklart...ursäkta mig..


Svara

Nyligen

  • 13:18 Website builder
  • 17:03 Getmancar your go-to carsharing
  • 14:07 Games
  • 17:54 Vegastars New Zealand
  • 16:56 Verde Casino Danmark
  • 13:54 Vegastars: Top Australian Online C
  • 21:28 Chicken Road Casino Game
  • 21:21 1xBet Promo Code 2025

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 571 446
27 965
271 786
422
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies