declare von C nach C#

25/06/2008 - 20:23 von Jürgen Schildmann | Report spam
Hi,
Ich habe eine Win32-DLL, die ich in C# nutzen möchte.
Die Deklaration der Funktion sieht in der C-Header-Datei so aus:

DWORD USMC_GetState( DWORD Device, // IN - Device number
USMC_State &Str); // OUT - Structure representing divice state

Die Struktur "USMC_State" sieht so aus:

typedef struct USMC_State_st{
int CurPos; // Current position (in microsteps)
float Temp; // Current temperature of the driver
BYTE SDivisor; // Step is divided by this factor
BOOL Loft; // Indicates backlash status
BOOL FullPower; // If TRUE then full power.
BOOL CW_CCW; // Current direction. Relatively!
BOOL Power; // If TRUE then Step Motor is ON.
BOOL FullSpeed; // If TRUE then full speed. Valid in "Slow Start"
mode only.
BOOL AReset; // TRUE After Device reset, FALSE after "Set Position".
BOOL RUN; // Indicates if step motor is rotating
BOOL SyncIN; // Logical state directly from input synchronization
PIN
BOOL SyncOUT; // Logical state directly from output synchronization
PIN
BOOL RotTr; // Indicates current rotary transducer press state
BOOL RotTrErr; // Indicates rotary transducer error flag
BOOL EmReset; // Indicates state of emergency disable button (local
control)
BOOL Trailer1; // Indicates trailer 1 logical state.
BOOL Trailer2; // Indicates trailer 2 logical state.
float Voltage; // Input power source voltage (6-39V) -$ version
0nly=-

} USMC_State;


Die Struktur sollte kein Problem darstellen. Ich habe einfach "int"
nach "short" und an Stelle von "BOOL" ebenfalls "short" eingetragen
(weil in WinDef.h steht "typedef int BOOL;")

USMC_GetState habe ich als
long USMC_GetState(long Device, ref USMC_State Str);
deklariert.
Das Programm làuft ohne Fehler; ich bekomme aber nur eine leere
Struktur mit alles null, was nicht sein darf, da ein Beispielprogramm
vernünftige Werte liefert.

Hat jemand ne Idee?

Gruß, Jürgen
 

Lesen sie die antworten

#1 Jochen Kalmbach [MVP]
25/06/2008 - 20:39 | Warnen spam
Hallo Jürgen!

Die Struktur sollte kein Problem darstellen. Ich habe einfach "int"
nach "short"



??? "int" => "int"...

Hast Du der Struktur auch die passenden Attribute verpasst?
Siehe auch diverse Beispiele auf
http://pinvoke.net/

Zeig doch mal die in C# definierte Struktur.

und an Stelle von "BOOL" ebenfalls "short" eingetragen
(weil in WinDef.h steht "typedef int BOOL;")



???
=> int

Greetings
Jochen

My blog about Win32 and .NET
http://blog.kalmbachnet.de/

Ähnliche fragen