Marcus schrieb:
> Bsp. im Header:
>
> int32_t DAQAPI DAQInputConfig(int32_t instance, int32_t ID, int32_t ch,
> DAQAPI_ChConf *cfg);
>
> und das Strukt:
>
> typedef struct {
> double voltage;
> double current;
> double upperlimit;
> double lowerlimit;
> }DAQAPI_ChConf;
>
> Wie müsste ich das in der C#-Klasse definieren? Habe leider in meiner
> Literatur nichts finden können. Ich vermute ungefähr so:
>
> namespace test{
> class DAQAPI{
> [DllImport("DAQLib.dll")]
> public static extern int32 DAQInputConfig(int32 instance, int32 ID,
> int32 ch, Und hier?);
> }
> }
Diese Funktion ist doch wirklich trivial umzusetzen, du findest Tausende
von Beispielen für solche einfachen Konstrukte bei pinvoke.net. Das
Grundprinzip ist immer: deklariere eine entsprechende Struktur in der
.net-Sprache und benutze die mittels ref (bzw. in VB: ByRef).
Eine leichte Steigerung davon sind "packed" Strukturen, aber auch die
lassen sich noch ziemlich leicht in den Griff bekommen. Der Trick steckt
hier vor allem in einer passenden Strukturdeklaration. Siehe Namespace
System.Runtime.InteropServices, speziell: StructLayout().
Richtig schwierig wird es erst bei Unions, bei Strukturen mit variabler
Länge und/oder bei Strukturen, die ihrerseits wieder Zeiger enthalten.
Da muss man dann schon sehr genau wissen, was man tut.
> DLLImport vor jede Funktion?
Natürlich gehört DllImport vor jede zu importierende Funktion.