# libnodave: Woher kommt die "libnodave.net.dll"?



## Thomas_v2.1 (9 November 2008)

Hallo,
kann mir jemand sagen wie die libnodave.net.dll im Dot.NET Verzeichnis erstellt wurde?

Ich schreibe gerade an einer kleinen Erweiterung mit libnodave (Quasi ein noDaveServer um die Daten an PLCSim durchzustellen). Deren Funktionen habe ich auch in eine dll ausgelagert, um diese mit C# wieder verwenden zu können.
Die Dll habe ich erzeugt, jedoch bekomme ich bei Ausfürung in C# eine Meldung dass ein Assemblyverweis nicht gefunden wurde.

In der .net.dll scheint auf jeden Fall einiges zu fehlen, da diese wesentlich kleiner als die eigentliche dll ist.

Gruß
Thomas


----------



## Rainer Hönle (10 November 2008)

Normalerweise sind diese .net-DLLs nur reine Wrapper-DLLs die die Funktionaufrufe an die normale DLL durchreichen (daher auch die geringere Größe). Deshalb muss die eigentliche DLL ebenfalls vorhanden sein und gefunden werden.


----------



## Thomas_v2.1 (10 November 2008)

Rainer Hönle schrieb:


> Normalerweise sind diese .net-DLLs nur reine Wrapper-DLLs die die Funktionaufrufe an die normale DLL durchreichen (daher auch die geringere Größe). Deshalb muss die eigentliche DLL ebenfalls vorhanden sein und gefunden werden.



Ah, ich dachte es gibt irgenwo eine Möglichkeit diese aus einer DLL automatisch erzeugen zu lassen.

Das InteropSignatureToolkit versucht ja zumindest einzelne Strukturen oder Funktionsprototypen umzusetzen. Aber so ganz ohne Handarbeit funktioniert das auch nicht.

Einer C-Funktion übergebe ich als Parameter einen Zeiger auf ein Array aus Strukturen.
In C sieht das so aus:

```
int waitForRequests(item_t item[], int * reqType)
```
Ich hätte ja beide Parameter als ref deklariert, das Toolkit will daraus aber 

```
public partial class NativeMethods {    
    /// Return Type: int
    ///item: item_t*
    ///reqType: int*
    [System.Runtime.InteropServices.DllImportAttribute("<Unknown>", EntryPoint="waitForRequests")]
public static extern  int waitForRequests(ref item_t item, ref int reqType) ;
}
```
machen.

Beim Aufruf bekomme ich jedoch eine IndexOutOfRangeException.

Das Array muss Platz für 20 Items haben, was es aber auch hat.

```
item_t[] Item = new item_t[20];
```


----------

