Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
DLL verwenden unter Excel
Larsen
myCSharp.de - Member



Dabei seit:
Beiträge: 192
Herkunft: Dortmund

Themenstarter:

DLL verwenden unter Excel

beantworten | zitieren | melden

Hallo,
ich habe vor eine DLL mit C# zu erstellen.
Da ich so etwas vorher noch nicht gemacht habe, folgende Fragen:

1. Reicht es aus, innerhalb der Klasse, die nach außen sichbaren Funktionen als
public zu kennzeichnen oder was muß ich alles anstellen um die DLL richtig zu erstellen
und für andere nutzbar zu machen?

2. Kann dann jeder diese DLL nutzen der das .NET Framework installiert hat oder gibt es da Einschränkungen?

3. Testhalber wollte ich eine DLL mal in Excel(97) einbinden, das hat aber nicht geklappt. Die Fehlermeldung war sinngemäß, dass die Einsprungstelle der DLL nicht gefunden werden kann. Wie benutze ich denn so eine DLL unter Excel(97)

Bin für jeden Rat dankabr !!!


Gruß
Larsen
...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Larsen,

zu 1. Die Klasse selbst muss auch public sein
zu 2. es gibt keine Einschränkungen, abgesehen von 3.
zu 3. Excel wird vermutlich eine native DLL oder eine Active-DLL, aber keine .NET-DLL wollen.

herbivore
private Nachricht | Beiträge des Benutzers
Larsen
myCSharp.de - Member



Dabei seit:
Beiträge: 192
Herkunft: Dortmund

Themenstarter:

beantworten | zitieren | melden

Danke für die Antwort,

eine Einbindung unter einem anderen C# Projekt habe ich mal ausprobiert und das funktioniert tatsächlich sehr einfach :-)

Was ich noch nicht komplett verstanden habe ist folgendes:
Kann ich mit C# eine DLL erstellen, die ich in anderen Programme (die zum Teil nichts mit dem .Net Framework zu tun haben z.B Labview oder Excel) eingesetzt wird.
Kann man die DLL so aufbauen, dass diese Programme quasi gar nicht merken dass sie es mit einer .NET DLL zu tun haben?

Wenn das geht, wie muß ich so eine DLL erstellen?

Hintergrund ist, dass ich die Klassen von .NET benutzen möchte, diese Funktionalität aber anderen (nicht .NET) Programmen über die DLL zur Verfügung stellen will.


Geht das so oder laufe ich in die falsche Richtung?

Gruß
Larsen
...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Larsen,
Zitat
Kann ich mit C# eine DLL erstellen, die ich in anderen Programme (die zum Teil nichts mit dem .Net Framework zu tun haben z.B Labview oder Excel) eingesetzt wird.
Ich denke nicht.
Zitat
Kann man die DLL so aufbauen, dass diese Programme quasi gar nicht merken dass sie es mit einer .NET DLL zu tun haben?
Ja, z.B. mit native C oder native C++.
Zitat
Hintergrund ist, dass ich die Klassen von .NET benutzen möchte, diese Funktionalität aber anderen (nicht .NET) Programmen über die DLL zur Verfügung stellen will.
Dann musst du einen Wrapper in native C oder native C++ schreiben.

herbivore
private Nachricht | Beiträge des Benutzers
Larsen
myCSharp.de - Member



Dabei seit:
Beiträge: 192
Herkunft: Dortmund

Themenstarter:

beantworten | zitieren | melden

Hi herbivore,

Danke für die leider ernüchternde Antwort :-(
Schade, ich dachte ich könnte das mit C# machen, da ich zwar ein Anfänger bei C# bin aber von C++ keine Ahnung habe.

Wenn ich den Wrapper in C++ richtig verstehe ist das ein Übersetzter von der native zur managed Welt.

Na dann werd ich mich mal reinarbeiten.

DANKE für die Infos

Gruß
Larsen
...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!
private Nachricht | Beiträge des Benutzers
Larsen
myCSharp.de - Member



Dabei seit:
Beiträge: 192
Herkunft: Dortmund

Themenstarter:

beantworten | zitieren | melden

Hallo,

ich habe durch googeln herausgefunden, das das zumindest unter VS2003 funktioniert haben soll.
http://www.wer-weiss-was.de/theme205/article2991494.html

Hat vielleicht doch jemand so etwas unter VS2005 schon mal gemacht?

Bin für jeden Rat dankbar...


Gruß
Larsen
...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!
private Nachricht | Beiträge des Benutzers
Larsen
myCSharp.de - Member



Dabei seit:
Beiträge: 192
Herkunft: Dortmund

Themenstarter:

beantworten | zitieren | melden

Hallo zusammen,

eine DLL unter Excel zu nutzen scheint einfach so zu funktionieren die DLL als COM zu registrieren.

Zumindest kann ich schon mal die Funktionen aus der DLL unter Excel nutzen.

Was aber noch nicht funktioniert, ist dass die vorhandenen Methoden automatisch in Excel angezeigt werden. Ich habe schon mal versucht das Interface anzugeben, aber irgendwas mache ich noch falsch...


namespace LarsLib
{
    public class LarsTest
    {
        public interface _LarsTest
        {
           string GiveValue();


        }
        public string  GiveValue(){
            return "HALLO";
        }
    }
}
( das Beispiel ist zwar nicht sinnig, aber zum Ausprobieren zweckmäßig :-) )


Kann mir jemand sagen wie ich das machen muß ?

Gruß
Larsen
...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!
private Nachricht | Beiträge des Benutzers
Yellow
myCSharp.de - Experte

Avatar #avatar-2347.png


Dabei seit:
Beiträge: 832

beantworten | zitieren | melden

hallo Larsen,

schau mal hier sind zwei Threads in denen du die Lösung zu deinem Problem findest:

COM Interface für die eigene Applikation
C# DLL in VB6

-yellow

EDIT: Link ausgetauscht ;o)
Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de
private Nachricht | Beiträge des Benutzers
Larsen
myCSharp.de - Member



Dabei seit:
Beiträge: 192
Herkunft: Dortmund

Themenstarter:

beantworten | zitieren | melden

Hallo,
danke für die Antwort!!!

Das klappt :-)
bin aber ein bischen unsicher, da ich im ersten Schritt nur das Interface ergänzt habe s.u. ohne den ganzen Krams...
[ComVisible(true)]
[Guid("DAC3E52F-C480-48D9-8D89-23691EA32029")]
[ClassInterface(ClassInterfaceType.None)]

und das scheint zu funktionieren.
Braucht man die Einträge mit Guid und Classinterface usw. garnicht wirklich.
(ich arbeite z.Z. mit VStudioExpress)


namespace LarsLib
{
    public interface  ILarsTest{
        string  GiveValue();               
    }

    public class LarsTest:ILarsTest
    {
        public string  GiveValue(){
            return "HALLO";
        }
    }
}



Gruß
Larsen
...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!
private Nachricht | Beiträge des Benutzers
Larsen
myCSharp.de - Member



Dabei seit:
Beiträge: 192
Herkunft: Dortmund

Themenstarter:

beantworten | zitieren | melden

OK,
hab mal ausprobiert die DLL auf einem anderen Rechner zu benutzen.
Hier kann ich nach dem anlegen des Verweis die Methoden nur sehen wenn man alles

[ComVisible(true)]
[Guid("DAC3E52F-C480-48D9-8D89-23691EA32029")]
[ClassInterface(ClassInterfaceType.None)]

usw. anlegt.

Trotzdem funktioniert die Benutzung auf dem anderen Rechner nicht.
Muß ich die DLL irgendwie speziell registrieren oder irgendwas zusätzlich angeben?

Also der Verweis in VBA klappt, die Methoden sind durch IntelliSense zu sehen aber beim durchlauf bekomme ich folgenden Fehler:
"Objekterstellung durch ActiveX-Komponente nicht möglich"

Ich merke ja ich komme vorran, aber es erinnert doch sehr an "Stochern im Nebel"
Woher bekomme ich diese Guid die ich verwenden muß?

Kann mir jemand sagen was ich machen muß, damit das auch auf anderen Rechnern funktioniert?
(.NET Framework ist natürlich installiert)


Gruß
Larsen
...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!
private Nachricht | Beiträge des Benutzers
Yellow
myCSharp.de - Experte

Avatar #avatar-2347.png


Dabei seit:
Beiträge: 832

beantworten | zitieren | melden

Zitat
Original von Larsen
Trotzdem funktioniert die Benutzung auf dem anderen Rechner nicht.
Muß ich die DLL irgendwie speziell registrieren oder irgendwas zusätzlich angeben?

Kann mir jemand sagen was ich machen muß, damit das auch auf anderen Rechnern funktioniert?
(.NET Framework ist natürlich installiert)
ja, du musst die dll auf dem anderen Rechner registrieren. Bei einer .NET DLL geht das aber nicht mit regsvr sondern mit dem tool regasm welches beim .NET Framework dabei ist.
Zitat
Original von Larsen
Also der Verweis in VBA klappt, die Methoden sind durch IntelliSense zu sehen aber beim durchlauf bekomme ich folgenden Fehler:
"Objekterstellung durch ActiveX-Komponente nicht möglich"
Wenn du ein Interface nutzt und dort die DispID's vergeben hast und die GUID manuell vergeben hast, sollte das nicht passieren, außer du änderst das Interface. Wenn nicht, musst du bei jeder Änderung bzw. neuem Kompilieren deines .NET Codes die DLL neu registrieren, was sehr lästig ist.
Zitat
Original von Larsen
Woher bekomme ich diese Guid die ich verwenden muß?
die kannst du frei erfinden, sie dient ja nur dazu die DLL eindeutig zu identifizieren (classID). In Visual Studio Prof. gibt es ein nützliches Tool welches dir eine Guid erstellt die du über die Zwischenablage einfügen kannst, du kannst aber auch über

Console.WriteLine(System.Guid.NewGuid());
dir eine Guid auf der Konsole ausgeben lassen.

-yellow
Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de
private Nachricht | Beiträge des Benutzers
Larsen
myCSharp.de - Member



Dabei seit:
Beiträge: 192
Herkunft: Dortmund

Themenstarter:

beantworten | zitieren | melden

Hi Yellow,
danke für deine Antworten, ich hab das mit System.Guid.NewGuid() ausprobiert, funktioniert prima (demnächst habe ich auch die professional Version, dann wirds etwas komfortabler).

Ich habe versucht die DLL auf dem anderen Rechner zu registrieren:
regasm LarsLib.dll
Das wurde auch mit
Tpes registered successfully
bestätigt.

In meiner VBA Anwendung auf dem anderen Rechner kann ich alle Methoden die im Interface stehen auch sehen, trotzdem bekomme ich beim Durchlauf durch das Programm an der Stelle wo ich ein Object der KLasse anlegen will folgenden Fehler:
Laufzeitfehler -214623....
Automatisierungsfehler


Ich hänge den ganzen Kram mal hier ein, vielleicht könnt ihr ja erkennen was falsch ist.


using System;
using System.Collections.Generic;
using System.Text;
using System.Xml ;
using System.Xml.XPath;
using System.Runtime.InteropServices;

namespace LarsLib
{
    [ComVisible(true)]
    [Guid("39446dd4-f29b-4726-8937-5eba4bc417e4")]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface ILarsTest
    {
        [DispId(1)]
        void LoadData(string Path);
        [DispId(2)]
        string GiveValue(string DataType, string DataName, string Data);
        [DispId(3)]
        string GiveEepValue(string DataType, string EepFeature, string DataName, string Data);
        [DispId(4)]
        int TypeCnt(string Type);
        [DispId(5)]
        int TypeCntEEP(string Feature);

    }

    [ComVisible(true)]
    [Guid("bb5aba28-3339-4afa-ac13-02157a2c458e")]
    [ClassInterface(ClassInterfaceType.None)]
    [ProgId("LarsLib.LarsTest")]
    public class LarsTest : ILarsTest
    {   

        public void LoadData(string Path){
	...
        }
        public int TypeCnt(string Type)
        {
	...
        }
        public int TypeCntEEP(string Feature)
        {
	...          
        }

        public string  GiveValue(string  DataType, string DataName, string Data){
	...
        }

        public string GiveEepValue(string DataType,string EepFeature ,string DataName, string Data)
        {
	...
        }
    }
}

Hat jemand eine Idee?
Ich hab im Moment leider keine mehr :-((

Habe gerade noch was über "creation of a strong named key " gelesen muß ich vielleicht so was machen ?

Gruß
Larsen
...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!
private Nachricht | Beiträge des Benutzers
Yellow
myCSharp.de - Experte

Avatar #avatar-2347.png


Dabei seit:
Beiträge: 832

beantworten | zitieren | melden

hallo Larsen,

ich vermute es hängt mit den Attributen ClassInterfaceType.None und ComInterfaceType.IsIDispatch zusammen.

Versuchst du die DLL über späte Bindung einzubeziehen? ClassInterfaceType.None untersagt das nämlich, hier müsstest du vermutlich AutoDispatch anstatt None angeben.

Wenn du die DLL in die Verweise aufnehmen willst, sollte es gehen wenn du beim Interface das Attribut ComInterfaceType.IsIDispatch weglässt, den dieses veranlasst, dass deine Schnittstelle für COM als Dispatchschnittstelle offen gelegt wird, wodurch nur spätes Binden ermöglicht wird.

-yellow

EDIT: nachtrag ;o)
Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de
private Nachricht | Beiträge des Benutzers
Larsen
myCSharp.de - Member



Dabei seit:
Beiträge: 192
Herkunft: Dortmund

Themenstarter:

beantworten | zitieren | melden

Hallo Yellow,

ich hab das mal ausprobiert, habe aber immer noch die gleiche Fehlermeldung.

Ich schreib einfach noch mal zusammen was ich im Detail mache, in der Hoffnung, dass jemand sagt: " klar , kann doch so nicht funktionieren, das geht doch so...."

1. Also ich erstelle den Quelltext für die DLL in der Form wie oben im Qelltextfenster.
2. Als nennenswerte Einstellung im VS nehme ich nur "Für COM-Interop registrieren" vor.
3. Projektmappe neu erstellen
4. Auf dem gleichen Rechner mit VBA(Excel97) einen Verweis auf die erstellte dll(tlb) und glücklich sein...
5. Die dll und tbl auf den anderen Rechner kopieren.
6. Aufruf "regasm.exe LarsLib.dll" -> Tpes registered successfully
7. In VBA (Excel97) einen Verweis auf die dll(tbl) erstellen
8. Anschließend sind sowohl die Klasse als auch die Methoden per Intellisense vorhanden es kommt aber die Fehlermeldung
Laufzeitfehler -214623....
Automatisierungsfehler
8o bei der Nutzung der Klasse.

Ich finde die Möglichkeit die .NET Klassen so einfach in der "alten" Welt nutzen zu können genial, das nutzt mir nur nichts wenn ich das nicht universell (also auch auf anderen Rechnern) ans laufen bekomme.

Hat noch jemand eine Idee, bevor ich verzweifelt zusammenbreche!!!

Gruß
Larsen
...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!
private Nachricht | Beiträge des Benutzers
Yellow
myCSharp.de - Experte

Avatar #avatar-2347.png


Dabei seit:
Beiträge: 832

beantworten | zitieren | melden

hallo Larsen,

entferne einfach folgende Zeile:


[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]

dann sieht der Code so aus und müsste funktionieren


using System;
using System.Collections.Generic;
using System.Text;
using System.Xml ;
using System.Xml.XPath;
using System.Runtime.InteropServices;

namespace LarsLib
{
    [ComVisible(true)]
    [Guid("39446dd4-f29b-4726-8937-5eba4bc417e4")]
    public interface ILarsTest
    {
        [DispId(1)]
        void LoadData(string Path);
        [DispId(2)]
        string GiveValue(string DataType, string DataName, string Data);
        [DispId(3)]
        string GiveEepValue(string DataType, string EepFeature, string DataName, string Data);
        [DispId(4)]
        int TypeCnt(string Type);
        [DispId(5)]
        int TypeCntEEP(string Feature);

    }

    [ComVisible(true)]
    [Guid("bb5aba28-3339-4afa-ac13-02157a2c458e")]
    [ClassInterface(ClassInterfaceType.None)]
    [ProgId("LarsLib.LarsTest")]
    public class LarsTest : ILarsTest
    {   

        public void LoadData(string Path){
	...
        }
        public int TypeCnt(string Type)
        {
	...
        }
        public int TypeCntEEP(string Feature)
        {
	...          
        }

        public string  GiveValue(string  DataType, string DataName, string Data){
	...
        }

        public string GiveEepValue(string DataType,string EepFeature ,string DataName, string Data)
        {
	...
        }
    }
}

wie oben bereits geschrieben, widersprechen sich ClassInterfaceType.None und ComInterfaceType.IsIDispatch

-yellow
Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de
private Nachricht | Beiträge des Benutzers
Larsen
myCSharp.de - Member



Dabei seit:
Beiträge: 192
Herkunft: Dortmund

Themenstarter:

beantworten | zitieren | melden

Hi Yellow,
ich hab das noch mal versucht. Ohne Erfolg X(

Da die dll auf dem Rechner mit dem ich sie erstelle funktioniert, habe ich den Verdacht, es muß an der Registrierung auf dem anderen Rechner liegen.
Auf dem Entwicklungsrechner wird die Registrierung ja auch irgendwie von VS2005 übernommen.
(Aus lauter Verzweiflung habe ich den Rechner natürlich auch schon mal neu gebootet)

Ich hab mal die Einträge in der registry der beiden Rechner verglichen, die sind identisch bis auf...


HKEY_CLASSES_ROOT\CLSID\{BB5ABA28-3339-4AFA-AC13-02157A2C458E}\InprocServer32
HKEY_CLASSES_ROOT\CLSID\{BB5ABA28-3339-4AFA-AC13-02157A2C458E}\InprocServer32\1.0.0.0
hier fehlt der Eintrag "CodeBase REG_SZ file:///D:/...usw.

diesen Eintrag hab ich mit dem richtigen Pfad mal manuell hinzugefügt (ich hoffe ich baue hier keinen Scheiß, mit der Registry).
Hat aber auch nichts gebracht.

Ist Excel eigentlich eine gute wahl zum ausprobieren ?
Ich nehme Excel ja nur, um zu schauen ob ich die DLL grundsätlich in der "native Welt" benutzen kann.
Kann ich das vielleicht auch mit einem anderen Progarmm(nicht Office) machen ?

Larsen
...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!
private Nachricht | Beiträge des Benutzers
Yellow
myCSharp.de - Experte

Avatar #avatar-2347.png


Dabei seit:
Beiträge: 832

beantworten | zitieren | melden

hallo Larsen,

also auf deinem Entwicklungsrechner funktioniert kommt jetzt beim Aufruf einer Methode deiner .NET-DLL kein Automatisierungsfehler mehr? Das funktioniert jetzt?

Das Problem tritt nur auf dem anderen Rechner auf?

-yellow
Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de
private Nachricht | Beiträge des Benutzers
Larsen
myCSharp.de - Member



Dabei seit:
Beiträge: 192
Herkunft: Dortmund

Themenstarter:

beantworten | zitieren | melden

Hi Yellow,
sorry fals ich mich irgendwie verwirrend ausgedrückt habe. (ich bin mittlerweile auch sehr verwirrt)

Also, die Erstellung der dll hat auf meinem Rechner mit VS2005Express wunderbar funktioniert, nachdem ich mich hier im Forum aufgeschlaut habe (besten Dank dafür).
Zur Probe ob das nur unter C# funktioniert oder auch sonst, habe ich eine Einbindung unter Excel auf dem gleichen Rechner gemacht und das funktionierte auch.

Dann habe ich mir überlegt, was muß ich denn eigentlich tun, um die dll auf einem anderen Rechner zu nutzen.
Also habe ich meinen Laptop genommen (ist auch VS2005Express drauf) und versucht die dll zu nutzen. Dann fingen die Probleme an. Das funktionierte eben nicht.
(Auch auf einem dritten Rechner funktioniert´s übrigens nicht)

Habe eben mal ausprobiert den Haken bei "Für COM-Interop registrieren" raus zu nehmen und auf dem Entwicklungsrechner von "hand" zu registrieren.
Dann kommt unter Excel die gleiche Fehlermeldung wie auf meinem LapTop. Also muß das doch was mit der Registrierung zu tun haben oder?

Ich habe beim googeln was über strong name und key files gelesen aber nicht ganz verstanden ob ich das machen muß. Kann mir das jemand erklären?

Gruß
Larsen
...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!
private Nachricht | Beiträge des Benutzers
Larsen
myCSharp.de - Member



Dabei seit:
Beiträge: 192
Herkunft: Dortmund

Themenstarter:

beantworten | zitieren | melden

Hallo zusammen,

Nachdem ich erfolglos versucht habe die DLL auf dem Entwicklungsrechner von "hand" zu registrieren habe ich folgendes versucht:

1. "Für COM-Interop registrieren" aus Entwicklungsumgebung entfernt. (Da ich die
dll selbst registrieren will)

2. Assembly mit "strong name" erzeugt (vorher Schlüssel File erzeugt usw...)

3. Das von "hand" registrieren über regasm LarsLib.dll /tlb hat nicht funktioniert.

4. regasm LarsLib.dll /tlb /codebase ausprobiert und siehe da auf dem Entwicklungsrechner funktionierts.

5. Das gleiche auf dem Laptop gemacht und da geht es weiterhin nicht.

6. dann habe ich über die Funktion regasm LarsLib /regfile /codebase die Registry Einträge auf beiden Rechnern verglichen, mit dem Ergebnis, dass beide (abgesehen vom Verzeichnis der Codebase) exakt gleich sind.

7 ALSO WAS MACHE ICH FALSCH !!!! X( X( X( X( X( X( X( X( X( X(

Absolut frustig ist zu wissen, das das alles funktionieren sollte, es aber dennoch nicht tut.

!!!WAS KANN MAN NOCH AUSPROBIEREN !!!

Bin (weil verzweifelt ) für jeden Tip dankbar...

Larsen
...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!
private Nachricht | Beiträge des Benutzers
Larsen
myCSharp.de - Member



Dabei seit:
Beiträge: 192
Herkunft: Dortmund

Themenstarter:

beantworten | zitieren | melden

Hallo,
irgendwie poste ich hier im Moment nur alleine :-(

Aber egal...
ich habe folgenden Artikel gelesen Qualifizieren von .NET-Typen für die Interoperation und hier steht,

Der Standardkonstruktor der Typen muss öffentlich sein und in COM aktiviert werden.

Verwaltete, öffentliche Typen sind in COM sichtbar. Allerdings können COM-Clients den Typ ohne öffentlichen Standardkonstruktor (ein Konstruktor ohne Argumente) nicht erstellen. COM-Clients können den Typ aber trotzdem verwenden, wenn er auf andere Weise aktiviert wird.

wenn ich mir das so ansehe, habe ich gar keinen Standardkonstruktor angegeben.

Leider kann ich das erst am Montag ausprobieren, ob es daran liegt.
Ich hoffe, das das Thema dann beendet ist.
Ich berichte dann das Ergebnis.

Falls doch noch jemand etwas weiß, immer her damit.

Gruß
Larsen
...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!
private Nachricht | Beiträge des Benutzers
Yellow
myCSharp.de - Experte

Avatar #avatar-2347.png


Dabei seit:
Beiträge: 832

beantworten | zitieren | melden

hallo Larsen,
Zitat
Original von Larsen
Hallo,
irgendwie poste ich hier im Moment nur alleine :-(

ich war leider am Wochenende nicht am Rechner, darum habe ich auch nicht mehr auf deine Postings antworten können. Was ich dir anbieten könnte wäre, du schickst mir per Mail deine Test-DLL und seperat die Projektmappe mit dem Test-Code. Dann kann ich versuchen das Problem auf meinem Rechner nachzustellen, und finde, sollte es auch auf meinem Rechner nicht gehen, eventuell den Haken im Projekt.

Wäre das ein Vorschlag?

-yellow
Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de
private Nachricht | Beiträge des Benutzers
Larsen
myCSharp.de - Member



Dabei seit:
Beiträge: 192
Herkunft: Dortmund

Themenstarter:

beantworten | zitieren | melden

Hi yellow,

=) =) =)!!!!! super nettes angebot !!!!!! DANKE =) =) =)

Ich hab gerade mal geguckt, wie ich dir eine Mail mit dem ganzen Krams schicken kann.
Wenn ich über die Profilansicht gehe, kann ich irgendwie nur Text eingeben aber keine Anhänge. Hab ich da was übersehen ?

(Übrigens meine Hoffnung mit dem Standardkonstruktor hat sich zerschlagen, scheint zwar auch wichtig zu sein behebt aber mein Problem nicht.)

Wie schicke ich dir das am besten ?

Gruß
Larsen
...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!
private Nachricht | Beiträge des Benutzers
Yellow
myCSharp.de - Experte

Avatar #avatar-2347.png


Dabei seit:
Beiträge: 832

beantworten | zitieren | melden

hallo larsen,

wenn du das Empfangen von Privaten Nachrichten aktivierst, kann ich dir meine Mail-Adresse schicken :D.

-yellow
Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de
private Nachricht | Beiträge des Benutzers
Larsen
myCSharp.de - Member



Dabei seit:
Beiträge: 192
Herkunft: Dortmund

Themenstarter:

beantworten | zitieren | melden

Sollte jetzt gehen !!!
...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!
private Nachricht | Beiträge des Benutzers
Wolf_maYer
myCSharp.de - Member

Avatar #avatar-2284.jpg


Dabei seit:
Beiträge: 286
Herkunft: Bochum

beantworten | zitieren | melden

Da ihr dass ja jetzt privat löst, würde mich als stiller Leser die Lösung des Problems interessieren

Bitte postet sie hier am Ende.

Gruß, maYer
private Nachricht | Beiträge des Benutzers
Larsen
myCSharp.de - Member



Dabei seit:
Beiträge: 192
Herkunft: Dortmund

Themenstarter:

beantworten | zitieren | melden

Klar,
ich habe dieses Forum jetzt so lange mit diesem Zeug strapaziert =) dass ich die
Lösung ( hoffentlich finden wir sie ) auf jeden Fall hier eintrage!

Gruß
Larsen
...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!
private Nachricht | Beiträge des Benutzers
Larsen
myCSharp.de - Member



Dabei seit:
Beiträge: 192
Herkunft: Dortmund

Themenstarter:

beantworten | zitieren | melden

=) =) =)!!!! gefunden !!!! =) =) =)

Hallo,
ich habe den Fehler gefunden.
guckst du hier und guckst du hier.
Anscheinend gibt es ein Problem zwischen VS2005 und der Office Welt.
Add-ins, smart documents, or smart tags that you create by using Microsoft Visual Studio 2005 do not run in Office
Nachdem ich VS2005-KB908002-ENU-x86.EXE auf dem Laptop installiert habe, funktioniert meine dll auch dort.

Warum das auf meinem Entwicklungsrechner funktioniert hat, kann ich mir jetzt auch erklären. Ich bin bei der Einarbeitung in dieses dll Thema schon mal über dieses Update gestolpert, hatte aber zu dieser Zeit einen anderen Fehler. Das Update hatte mir zu diesem Fehler nichts gebracht, war dann aber installiert. Den Zusammenhang dieses Updates mit meinem jetztigen Problem habe ich dann nicht erkannt.
Dadurch kam es zu dem unterschiedlichen Verhalten zwischen Laptop und Entwicklungsrechner.

DANKE an alle, die mir weiterhelfen wollten.

Gruß
Larsen
...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!
private Nachricht | Beiträge des Benutzers
Yellow
myCSharp.de - Experte

Avatar #avatar-2347.png


Dabei seit:
Beiträge: 832

beantworten | zitieren | melden

hallo Larsen,

freut' mich dass es geklappt hat :D.

Die Probleme zwischen VS 2005 und Office-Welt hatte ich ausgeschlossen, dachte du hättest bereits Rainbird's Hinweis beachtet (COM Interop DLL f. Excel VBA: VS2003->alles super, VS2005->geht nicht...?)

-yellow
Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de
private Nachricht | Beiträge des Benutzers
Larsen
myCSharp.de - Member



Dabei seit:
Beiträge: 192
Herkunft: Dortmund

Themenstarter:

beantworten | zitieren | melden

Hi Yellow,
ich hatte der Sache keine Gewichtung beigemessen da bei der Problematik immer von " Add-in Support" gesprochen wurde.
Und das was ich machen wollte war ja nicht wirklich ein AddIn.

Zu dem Zeitpunkt habe ich auch noch mehr mit der generellen Erstellung einer dll gekämpft.

Erst als ich auf dieses Update ganau im Kontext meines Fehlerfalls gestoßen bin, sind mir die Augen aufgegangen.

Jetzt bin ich einfach nur froh, dass es funktioniert, weil ich jetzt endlich weiterkomme =)

Gruß
Larsen
...............Es gibt 10 Arten von Menschen ...............
die einen kennen binäre Zahlen, die anderen nicht!!!
private Nachricht | Beiträge des Benutzers
Yellow
myCSharp.de - Experte

Avatar #avatar-2347.png


Dabei seit:
Beiträge: 832

beantworten | zitieren | melden

hallo Larsen,

ich gebe aber zu... an dieser Stelle hätte ich auch böse zu knappern gehabt.

-yellow
Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de
private Nachricht | Beiträge des Benutzers