structs in arrays
-
Ich habs ja befürchtet...
Aber nur damit ichs richtig verstehe, das klingt jetzt so als wäre das was ich machen möchte gar nicht möglich.
Das ich aus C# jetzt dieses Array (auf irgendeine Weise) in die C++ DLL gebe, es dort bearbeite und dann (auf irgendeine andere Weise) zurückgebe ist theoretisch schon möglich ?Danke für die Links, dann werd ich mal anfangen zu lesen

-
So, es scheint jetzt zu laufen, in dem C# Sharp Forum hat man mir helfen können, danke nochmal Th69 für den Link !
Wollte jetzt schnell die Lösung noch hier verewigen falls mal jmd vor dem selben Problem steht oder es einen noch interessiert:Es mussten lediglich die 2 Structs angepasst werden:
Struct in C++:
struct EventData { char eventID1[5]; char eventID2[5]; char obNumber[5]; char priorityClass[5]; char dataIDZ1[5]; char dataIDZ23[5]; char suppDataZ11[5]; char suppDataZ12[5]; char suppDataZ21[5]; char suppDataZ22[5]; char suppDataZ31[5]; char suppDataZ32[5]; char eventText[2500]; };Und im C# Struct muss jeder String "gemarshalled" werden:
public struct EventData { [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5)] public string eventID1; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5)] public string eventID2; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5)] public string priorityClass; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5)] public string obNumber; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5)] public string dataIDZ23; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5)] public string dataIDZ1; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5)] public string suppDataZ11; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5)] public string suppDataZ12; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5)] public string suppDataZ21; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5)] public string suppDataZ22; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5)] public string suppDataZ31; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5)] public string suppDataZ32; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2500)] public string eventText; }Dadurch wird jeder String als Zeichenkette fester Größe in dem Struct abgelegt und ist mit dem charFelder Struct in C++ kompatibel.
So braucht die C++ DLL auch keinen Rückgabewert sondern ich kann mit dem Pointer auf das C# Array direkt die Werte dort ändern.
Ich habe noch nicht alle Testfälle abgedeckt aber bis jetzt sieht es so aus als wäre das die Lösung gewesen
