tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Shakie
ERLEDIGT
JA
ANTWORTEN
12
ZUGRIFFE
906
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Babatune Babatune ist offline Mitglied
    Registriert seit
    Mar 2011
    Beiträge
    23
    Hallo zusammen,

    wie befülle ich denn ein Array aus einer C# Library?

    ich habe in C#

    Code :
    1
    2
    3
    4
    5
    6
    
    public class CKlasse{
     
    public string text;
    public  string[] textarray = new string[3];
     
    }
    und in VBA

    Code :
    1
    2
    3
    4
    
    Set obj as New CKlasse
     
    obj.text = "hallo"              'so funktionierts
    obj.textarray(1) = "hallo"     'aber so  nicht

    wie mach ich das denn bei arrays?

    viele Grüße,
    Babatune
     

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Das sollte funktionieren.

    Welche Fehlermeldungen bekommst du?

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  3. #3
    Babatune Babatune ist offline Mitglied
    Registriert seit
    Mar 2011
    Beiträge
    23
    Hi,

    ich bekomme die Fehlermeldung:
    "Fehler beim Kompilieren:
    Funktion oder Schnittstelle kann nur eingeschränkt verwendet werden oder verwendet einen Typ der Automatisierung, der von Visual Basic nicht unterstützt wird."
     

  4. #4
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Du verwendest kein VB.NET?

    Du verwendest COM+?

    Was genau machst du?

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  5. #5
    Babatune Babatune ist offline Mitglied
    Registriert seit
    Mar 2011
    Beiträge
    23
    Ich hab in CSharp die C# Klasse geschrieben, und dort eingestellt 'für com interop registrieren' und comvisible="true", dadurch wird beim Erzeugen eine *.tbl erzeugt welche ich dann in VBA über 'Verweise..' einfüge.

    Ich nehme mal an ich verwende somit Com+?!
    Wie verwende ich VB.Net?

    Viele Grüße
     

  6. #6
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von Babatune Beitrag anzeigen
    Ich hab in CSharp die C# Klasse geschrieben, und dort eingestellt 'für com interop registrieren' und comvisible="true", dadurch wird beim Erzeugen eine *.tbl erzeugt
    Du meinst *.tlb?
    Zitat Zitat von Babatune Beitrag anzeigen
    welche ich dann in VBA über 'Verweise..' einfüge.

    Ich nehme mal an ich verwende somit Com+?!
    Ja. Aber warum tust du das?
    Zitat Zitat von Babatune Beitrag anzeigen
    Wie verwende ich VB.Net?
    Genau wie C# auch. Einfach ein VB.NET Projekt erstellen.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  7. #7
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Hi zusammen

    @Babatune
    Es wäre hier hilfreich, wenn du hier mal den kompletten Kontext liefern würdest, um hier mehr Klarheit zu schaffen.

    @deepthroat
    Tipp für die Zukunft. Stell deine Rückfragen so, dass der Threadstarter dir auch Antworten liefern kann, die dir weiterhelfen. Vor allem wenn die Erfahrung und das Knowhow auf der Gegenseite nicht so umfassen sind wie deine (und das ist hier nun mal der Fall) hilfst du allen Beteiligten weiter
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  8. #8
    Babatune Babatune ist offline Mitglied
    Registriert seit
    Mar 2011
    Beiträge
    23
    Hallo Nico,

    also nochmal alles zusammen:

    Ich habe in C# eine Klasse erstellt, und auf die erstellte Bilbiothek in Visual Basic verwiesen. (Ich benutze Office 2007.)
    Dieser Teil soll ausgelagert bleiben, also ich hab meine Programmmethoden in C#.
    Ich will nun das ganze über Access verwenden, deswegen muss ich meine benötigten Datenbankinhalte an C# übergeben.

    Mein Problem ist nun dass ich es nicht schaffe ein Array in der C# Klasse zu befüllen.
    Bei normalen Strings usw. klappt das noch, aber eben nicht bei Arrays.

    Ich hab vereinfacht also als Code in C#
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    public class VBTester
    {
        public string meinString;
        public string[] meinArray = new string[5];
     
                  public ... irgendwelcheMethoden(...){
                  ...
                  }
    }
    Die Befüllung mach ich in VB so: (zzzVBTester ist der Projektname)
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    Function TestC()
     
    Dim obj As New zzzVBTester.VBTester  
     
    obj.meinString = "Hallo"   ' so funktioniert es
     
    obj.meinArray(1) = "was da los" 'so nicht
     
    End Function

    Wenn ich das so mache bekomme ich die Fehlermeldung:
    Laufzeitfehler '438':
    Objekt unterstützt diese Eigenschaft oder Methode nicht.


    Viele Grüße
     

  9. #9
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    Du könntest eine Wrapper-Methode schreiben, um Array-Werte zu setzen:
    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    8
    
    public class VBTester
    {
        public string meinString;
        private string[] meinArray = new string[5]; 
        public void SetArrayValue(int index, String value){
            meinArray[index] = value;
        }
    }
    Oder vielleicht funktioniert auch eine Eigenschaft:
    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    8
    
    public class VBTester
    {
        public string meinString;
        private string[] _meinArray = new string[5]; 
        public string[] GetMeinArray{
            get { return _meinArray; }
        }
    }
    Und dann in VBA
    Code vbnet:
    1
    2
    3
    
    Dim obj As New zzzVBTester.VBTester
    obj.SetArrayValue(1, "hoffentlich geht es so")
    obj.GetMeinArray(1) = "oder so"
    Das geht der Ursache des Problems zwar nicht auf den Grund, aber vielleicht genügt es dir ja.
    Babatune bedankt sich. 
    hihi = -h²

  10. #10
    Babatune Babatune ist offline Mitglied
    Registriert seit
    Mar 2011
    Beiträge
    23
    Hallo Shakie,

    ähnlich wie deine erste Methode hat ichs dann auch noch gemacht. Ich hab nur noch ein weiteren String übergeben der den Namen des Arrays enthält und dann mit einer switch-case Abfrage wird dann das dementsprechende Array befüllt.
    Ich dachte das wäre etwas ungeschickt, aber wenn du es jetzt auch so vorschlägst werd ich mich wohl damit zufrieden geben

    Dein zweiter Vorschlag hat mir auch sehr viel gebracht, da ich auch noch ein Problem hatte mit dem Zugriff auf ein Objekt einer weiteren Klasse.
    Mit der Methode konnt ich das nun deutlich verbessern.

    Also vielen Dank
     

  11. #11
    Babatune Babatune ist offline Mitglied
    Registriert seit
    Mar 2011
    Beiträge
    23
    Hallo nochmal,

    ich stehe gerade wieder vor einem ähnlichen Problem. Und zwar hab ich in c# eine methode die ein Array zurückliefert, und wieder hängts bei mir dieses array in vb zu bekommen.

    Ich hab in C#
    Code :
    1
    2
    3
    4
    5
    
    public class VBTester{
      public string[] meinemethode(){
      ...
      }
    }

    und so will ichs haben, funktioniert aber nicht:
    Code :
    1
    2
    3
    
    Dim obj As New zzzVBTester.VBTester
    Dim result() as string;
    result = obj.meineMethode


    Mir fehlt irgendwie der Einfall wie ich das wieder mit einer Wrapper Methode lösen kann...
     

  12. #12
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    Brauchst du denn unbedingt das ganze Array als solches?
    Wenn ja, dann könntest du eine Wrapper-Methode verwenden, die dir jeden einzelnen Array-Eintrag ausliesst (also ein "GetArrayValue"-Analogon zu dem was ich oben "SetArrayValue" genannt habe) und dann in VBA ein neues Array zusammenbauen, indem du mittels "GetArrayValue" das Array kopierst.

    EDIT: Da fällt mir noch was ein. In VBA braucht man keine Klammern (), wenn eine Methode keine Argumente bekommt, oder? Du könntest sie trotzdem mal nach dem Aufruf von "meineMethode" hinschreiben, vielleicht hilft es was.
    Geändert von Shakie (11.04.11 um 12:26 Uhr)
     
    hihi = -h²

  13. #13
    Babatune Babatune ist offline Mitglied
    Registriert seit
    Mar 2011
    Beiträge
    23
    Ah, jetzt läufts...
    hab daran die ganze Zeit rumprobiert bis ich festgestellt habe dass der Fehler doch ganz wo anders lag und die übergabe ganz normal funktioniert so wie ich es auch zuerst probiert habe.

    Ich sollte mir vielleicht angewöhnen die Fehler an der richtigen Stelle zu suchen, das würde einiges an Zeit sparen
     

Ähnliche Themen

  1. Zugriff auf Library (DirectX)
    Von Cromon im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 22.02.09, 22:38
  2. Array-Zugriff
    Von droni im Forum PHP
    Antworten: 3
    Letzter Beitrag: 21.04.08, 07:07
  3. Zugriff auf array
    Von anmae im Forum PHP
    Antworten: 2
    Letzter Beitrag: 11.08.06, 03:10
  4. Library erstellen die eine Library nutzt
    Von melmager im Forum C/C++
    Antworten: 5
    Letzter Beitrag: 27.10.04, 12:00
  5. Array Key Zugriff
    Von cryo im Forum Javascript & Ajax
    Antworten: 3
    Letzter Beitrag: 26.08.03, 11:28