LibNoDave DB Länge

Außer zu Backup-Zwecken bei Systemen, die ich nicht kenne, sehe ich
keine Veranlassung dazu, daher die vielleicht
blöde Frage: warum willst Du überhaupt eine DB-Länge ermitteln?
Würde mich mal interessieren.

Ansonsten funktioniert fast immer die Methode mit dem Ausprobieren:
Kann ich n Worte lesen ? Ja: probiere n+1, Nein: war eins zuviel.
 
Habe mal so angefangen:

public struct DaveBlockInfo
{
public char[] type;
public char[] x1;
public char[] w1;
public char[] pp; /* allways 'pp' */
public short[] x2; /* 00 4A */
public short number; /* the block's number */
public short[] x3 ; /* ? */
public short length; /* the block's length */
public char[] x4;
public char[] name;
public char[] x5;
}

[DllImport("libnodave.dll"/*, PreserveSig=false */ )]
protected static extern int daveGetBlockInfo(IntPtr daveCon, ref DaveBlockInfo daveBlockInfo, int type, int db);
public int GetDBLength(int db)
{
DaveBlockInfo dbi = new DaveBlockInfo();
dbi.type =
new char[2];
dbi.x1 =
new char[2];
dbi.w1 =
new char[2];
dbi.pp =
new char[2];
dbi.x2 =
new short[4];
dbi.x3 =
new short[26];
dbi.x4 =
new char[16];
dbi.name =
new char[8];
dbi.x5 =
new char[12];
int ret = daveGetBlockInfo(this.daveConnection.pointer, ref dbi, libnodave.daveDB, db);

return ret;
}


vielleicht kann mir hier jemand weiterhelfen.

Bekomme folgende Fehlermeldung:

"Das angegebene Array hat nicht den erwarteten Typ."
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nur eine Auffälligkeit

Soweit ich sehe, ist der struct Member length nicht initialisiert, somit auch nach meinem C# Verständnis nicht allociert (auch int sind Objekte).

Vielleicht hilft es?
 
Vielen Dank für die Antwort.

Habe einen Weg gefunden:

Code:
[SIZE=2][COLOR=#0000ff]private[/COLOR][/SIZE][SIZE=2] [/SIZE][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][SIZE=2] GetLenght([/SIZE][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][SIZE=2] nr, [/SIZE][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][SIZE=2] blockType)
{
[/SIZE][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][SIZE=2] ret = [/SIZE][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][SIZE=2].MinValue;
[/SIZE][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][SIZE=2] len = 0;
[/SIZE][SIZE=2][COLOR=#0000ff]byte[/COLOR][/SIZE][SIZE=2][] blockBuffer = [/SIZE][SIZE=2][COLOR=#0000ff]new[/COLOR][/SIZE][SIZE=2] [/SIZE][SIZE=2][COLOR=#0000ff]byte[/COLOR][/SIZE][SIZE=2][65536];
[/SIZE][SIZE=2][COLOR=#0000ff]this[/COLOR][/SIZE][SIZE=2].daveConnection.getProgramBlock(blockType, nr, blockBuffer, [/SIZE][SIZE=2][COLOR=#0000ff]ref[/COLOR][/SIZE][SIZE=2](len));
ret = [/SIZE][SIZE=2][COLOR=#2b91af]libnodave[/COLOR][/SIZE][SIZE=2].getU16from(blockBuffer, 34);
 
[/SIZE][SIZE=2][COLOR=#0000ff]return[/COLOR][/SIZE][SIZE=2] ret;
}
[/SIZE]
 
Zurück
Oben