# DB-Länge mit libnodave



## Rosti (25 Mai 2009)

hallo alle zusammen !

ich bin ein anfänger im umgang mit libnodave, also bitte ich euch um einbisschen gedult fals ich euch nicht gleich verstehe !

ich benutze libnodave in Java und suche eine funktion um die DB länge auszulesen !

ich bitte um zahlreiche ideen und beiträge mir zu helfen !

danke im vorraus 

mfg
Rosti


----------



## marcengbarth (25 Mai 2009)

Ich nutze zwar Delphi aber die Funktion sollte es in Java auch geben:


```
daveGetBlockInfo(DaveConn, @Info, daveBlockType_DB, DB);
```

Als Rückgabewert bekommst du die DB-Größe in Byte.


----------



## Rosti (25 Mai 2009)

ich habe jetzt alles durchsucht und diesefunktion leider nicht gefunden !

hat sonst jemand noch eine hilfreiche idee


----------



## Zottel (25 Mai 2009)

Rosti schrieb:


> ich habe jetzt alles durchsucht und diesefunktion leider nicht gefunden !
> 
> hat sonst jemand noch eine hilfreiche idee


Es kann richtig sein, da- der Funktionsumfang der JAVA-Version geringer ist.
Wenn du die Funktion unbedingt brauchst, kannst du dir die entsprechende Funktion im C-Quellcode ansehen und in JAVA entsprechend programmieren. Wenn dir das zu schwierig scheint, kannst du mir auch eine PN schicken.


----------



## Fliegertiger (27 Mai 2009)

*DB-Länge auch für VB.NET*

Hi alle zusammen.

Ich wäre auch an eine Implementierung der Funktion interessiert aber unter VB.NET.

Kann jemand helfen???


----------



## mathgi (25 Juni 2009)

*DB Länge  - Excel and VB*

Hi

ich hab ähnliche Probleme in vba. 
Die in Modul12.bas implementierte Funktion daveGetBlockInfo funktioniert bei mir nicht.


```
Private Function daveGetBlockInfo(ByVal di As Long) As Byte
    x$ = String$(256, 0)            'create a string of sufficient capacity
    ip = daveInternalGetName(di)    ' have the text for code copied in
    Call daveStringCopy(ip, x$)    ' have the text for code copied in
    x$ = Left$(x$, InStr(x$, Chr$(0)) - 1) ' adjust the length
    daveGetName = x$                       ' and return result
End Function
```
Leider bin ich nicht der Crack der das alles durchschaut. Dachte mir ein Tippfehler könnte der Rückgabewert sein.

```
daveGetBlcokInfo = x$
```
Leider brachte mich das nicht weiter.
Kann mir da jemand weiterhelfen!?!?!?!

Sollte DBs komplette einlesen und halt dazu die länge wissen. Try and error find ich jetzt nicht so prickelnd, aber ok wäre noch ne möglichkeit.

Danke für jede Rückmeldung.


----------



## mathgi (25 Juni 2009)

*so funktionierts*

Hi 

hab mir selbst geholfen... falls jemand ähnliche Probleme damit hat hier meine Code ausschnitte.

Nicht Perfekt aber tut ;-)
folgende Deklaration eingefügt

```
Private Type daveBlockInfo
    typ(1) As Byte
    x1(1) As Byte '  /* 00 4A */
    w1(1) As Byte  '/* some word var? */
    pp(3) As Byte '/* allways 'pp' */
    x2(1) As Byte ' /* 00 4A */
    number As Integer '/* the block's number */
    x3(25) As Byte '  /* ? */
    length As Integer ' /* the block's length */
    x4(15) As Byte
    bname(7) As Byte
    x5(11) As Byte
End Type
```
verweis entsprechend abgeändert

```
Private Declare Function internalDaveGetBlockInfo Lib "libnodave.dll" _
 Alias "daveGetBlockInfo" (ByVal dc As Long, ByRef buffer As daveBlockInfo, _
 ByVal btype As Long, ByVal number As Long) As Long
```


```
res3 = internalDaveGetBlockInfo(dc, bb, daveBlockType_DB, lngDBNr)
lngDBLength = bb.length
```
achso noch folgende constanten geändert

```
Private Const daveBlockType_OB = 56 'asc("8")
Private Const daveBlockType_DB = 65 'asc("A")
Private Const daveBlockType_SDB = 66 'asc("B")
Private Const daveBlockType_FC = 67 'asc("C")
Private Const daveBlockType_SFC = 68 'asc("D")
Private Const daveBlockType_FB = 69 'asc("E")
Private Const daveBlockType_SFB = 70 'asc("F")
```
wems hilft...


----------



## Fliegertiger (29 Juni 2009)

*Dot.Net-Wrapper ???*

Hi, ich hab mir das Beispiel für VBA angeschaut. 

Wie setzte ich das nun in die Wrapper.DLL ein?

Da schauen die Aufrufe ja so aus:


```
[DllImport("libnodave.dll")]
        protected static extern int daveGetProgramBlock(IntPtr dc, int blockType, int number, byte[] buffer, ref int length);
        public int getProgramBlock(int blockType, int number, byte[] buffer, ref int length)
        {
            Console.WriteLine("length:" + length);
            int a = daveGetProgramBlock(pointer, blockType, number, buffer, ref length);
            Console.WriteLine("length:" + length);
            return a;
        }
```

Kann mir da jemand helfen?

Gruß Fliegertiger


----------

