VB Zugriff auf Array in C# Library

Babatune

Mitglied
Hallo zusammen,

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

ich habe in C#

Code:
public class CKlasse{

public string text;
public  string[] textarray = new string[3];

}
und in VBA

Code:
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
 
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."
 
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
 
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?
welche ich dann in VBA über 'Verweise..' einfüge.

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

Gruß
 
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 :)
 
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:
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:
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
 
Du könntest eine Wrapper-Methode schreiben, um Array-Werte zu setzen:
C#:
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:
C#:
public class VBTester
{
    public string meinString;
    private string[] _meinArray = new string[5]; 
    public string[] GetMeinArray{
        get { return _meinArray; }
    }
}
Und dann in VBA
Code:
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.
 
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 :)
 

Neue Beiträge

Zurück