?
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