Com Interop ein Classmember ansprechen

29/09/2008 - 15:41 von Michael | Report spam
Hallo zusammen,

ich hab das Problem das ich einfach nicht draufkomme wie ich ein bestimmtes
classmember ansprechen in einer COM interop dll.

[ClassInterface(ClassInterfaceType.AutoDual)]
[ProgId("TMNECCHD.BRecords")]
public sealed class B_Satz
{

string myvar;
ArrayList brecords = new ArrayList();

public B_Satz()
{
this.myvar = "test";
this.brecords.Add(new Brecord());
}
}

[ClassInterface(ClassInterfaceType.AutoDual)]
[ProgId("TMNECCHD.BRecord")]
public class Brecord
{
private String mMAC;

public String MAC
{
get { return mMAC; }
set { mMAC = value; }
}
}



Wenn die Klasse B_Satz instanziert wird kann ich das member brecords oder
myvar sehn
Allerdinges kann ich das member innerhalb der Arraylist nicht sehn

also irgendwie so ansprechen brecords(0).MAC

Was fehlt mir da bzw was muss ich tun das ich an MAC drankomme?

Grüsse und Danke
Michael
 

Lesen sie die antworten

#1 Frank Dzaebel
29/09/2008 - 19:51 | Warnen spam
Hall Michael,

ich hab das Problem das ich einfach nicht draufkomme wie ich ein
bestimmtes classmember ansprechen in einer COM interop dll.
[...] also irgendwie so ansprechen brecords(0).MAC
Was fehlt mir da bzw was muss ich tun das ich an MAC drankomme?



Wenn ich z.B.:

//=// COM-Lib:

[ClassInterface(ClassInterfaceType.AutoDual)]
[ProgId("TMNECCHD.BRecords")]
public sealed class B_Satz
{
string myvar;

public string MyVar
{
get { return myvar; }
set { myvar = value; }
}

public ArrayList Brecords = new ArrayList();

public B_Satz()
{
this.myvar = "test";
this.Brecords.Add(new Brecord());
}
}

[ClassInterface(ClassInterfaceType.AutoDual)]
[ProgId("TMNECCHD.BRecord")]
public class Brecord
{
private String mMAC = "MAC-Init";

public String MAC
{
get { return mMAC; }
set { mMAC = value; }
}
}

//// TestForm.cs:

private void Form1_Load(object sender, EventArgs e)
{
// using ComLibAuto2;
B_Satz bs = new ComLibAuto2.B_Satz();
bs.MyVar = "42";
Brecord br = bs.Brecords[0] as Brecord;
MessageBox.Show(br.MAC);
}


gibt es bei mir keine Probleme.
Oder meinst Du noch etwas anderes?

BTW: beachte ggf., dass Typen, die eine duale
Schnittstelle verwenden, Clients das Binden an ein
bestimmtes Schnittstellenlayout ermöglichen. Änderungen
an einer zukünftigen Version des Layouts des Typs oder
eines Basistyps führen zur Aufhebung der Verbindung
zu COM-Clients, die eine Bindung zu der Schnittstelle
haben...

[AutoDual ClassInterfaceType nicht verwenden]
http://msdn.microsoft.com/de-de/lib...82205.aspx

Normal also besseres Design: (Co)Klasse mit Interface.
Du findest in dieser NG öfter AutoDual, aber das ist
oft nur deswegen gemacht, um mal "eben" schnell
demjenigen ggf. eine funktionierende App zu ermöglichen.
In prof. Apps, besser auf obige Ratschlàge acht geben.


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen