C in C#
-
Hallo zusammen,
C# ich bin zwar kein absoluter C#Neuling.
Aber C# ist nicht gerade mein Steckenpferd,
ich komm eher aus dem Bereich C/C++, Java.Aber es ist nunmal so, dass es die Aufgabenstellung
verlangt dass gewisse structs in C auch über C# ansprechbar sind.
Ich hab aus meinen C-Files eine Lib gebaut, leider lies sich
die dll nicht direkt einbinden unter C# da sie wohl nicht den
CLS konventionen entsprach. Nun hab ich es anders gemacht und
eine art "Bridge" dazuwischengeschaltet und C in C++ erst eingebunden
und dieses assembly dann in C#.Alles schön und gut, die in C definierten Methoden liesen sich dann auch schön
aufrufen und taten ihren zweck, nur leider hatte ich probleme die structs
aufzurufen. Es kam immer die Meldung ich könnte sie unter diesen protection level nicht benutzen. Irgendwann sah ich dass es so ein schlüsselwort "ref" gab
um auf klassen oder structs einer bibliothek zugreifen zu können, doch dann kam die meldung es dürfen keine mixed types in diesem datentyp enthalten sein, was mich schon an den rand der verzweiflung trieb. Da meine structs wiederum structs enthielten ist es für mich unmöglich diese konvention einzuhalten.Nun meine Frage gibt es vielleicht eine elegantere Lösung C direkt in C# einzubinden, wenn ja welche, wie kann ich C# direkt C structs, methoden bekannt machen? Und meine 2te frage gibt es eine möglichkeit mixed types in einer klasse, struct zu haben welche mit dem schlüsselwort ref definiert wird?
-
hmm du könntest das ganze in unsafe-Blöcke schreiben, dann dürfte das mit dem Protection Level gehen ... bin aber nicht sicher, ob ich da nicht was verwechsel.
unsafe { //... }
-
ne leider nicht, ich lasse ja schon meine main in C# unter unsafe laufen damit ich pointer verwenden kann. Aber trotzdem danke
-
Im Prinzip musst du deine Strukturen in C# neu schreiben so dass sie den C Strukturen am ähnlichsten entsprechen und dann mit den Marshall Attributen das so hinbiegen das sie bei DLL Import richtig gemarshallt werden.
Siehe hier.
-
Servus,
Zwergli schrieb:
Im Prinzip musst du deine Strukturen in C# neu schreiben so dass sie den C Strukturen am ähnlichsten entsprechen und dann mit den Marshall Attributen das so hinbiegen das sie bei DLL Import richtig gemarshallt werden.
Siehe hier.
Ich stimme Zwergli zu, nur allerdings wirst du dir derbe die Zähne an diesen Structs in Structs in C# ausbeißen. Leider gibt es die Konstrukte nicht in C#, so kann man auch nicht einfach mal die Übergabeparameter locker marshallen.
Ich rate dir einen Wrapper in C++ zu schreiben der dir einfache Objekte an deine C# Anwendung liefern kann oder ändere die C lib weitestgehend um. Aus meiner Sicht ist es weniger aufwendig.
Suche einfach mal nach der Thematik unter google und du wirst erschlagen. Einfach ist es nicht....
mfg
Hellsgore
-
hey danke für die hilfe, ich schau mal ob ichs hinkrieg