Moin miteinander,

ich wollte mal verkünden, dass ich das Problem gefunden und gelöst habe.

Wie vermutet, arbeitet das Test-Tool richtig, das Problem lag in meiner DLL...

Der Aufrufer (also das Test-Tool) gibt die Referenz auf eine SBYTE_ARRAY - Struktur rein und erwartet, dass genau diese Referenz beschrieben wird. Nicht eine neue erstellt und dann die ursprüngliche überschrieben, nein, die originale wird verwendet.

Das sieht im Code dann wie folgt aus (habe nur den betreffenden CASE reinkopiert):

Code:
            case FIVE_BAUD_INIT:
                {
                    LOG(PROTOCOL, "Five baud init");

                    SBYTE_ARRAY& inputArray = *(SBYTE_ARRAY*)pInput;
                    SBYTE_ARRAY& outputArray = *(SBYTE_ARRAY*)pOutput;
                    unsigned long numberOfInputBytes = inputArray.NumOfBytes;

                    LOG(PROTOCOL, "pInput array");
                    LOG(PROTOCOL, "Wake up for ECU with id 0x%02x called", inputArray.BytePtr[0]);
                    LOG(PROTOCOL, "pInput array end");

                    unsigned long numberOfOutputBytes = outputArray.NumOfBytes;

                    outputArray.NumOfBytes = 2;
                    outputArray.BytePtr[0] = 0x00;
                    outputArray.BytePtr[1] = 0x81;

                    LOG(PROTOCOL, "pOutput array");
                    LOG_SBYTE(PROTOCOL, (SBYTE_ARRAY*)pOutput);
                    LOG(PROTOCOL, "pOutput array end");
                }
                break;
pInput und pOutput sind die beiden Referenzen, die werden auf SBYTE_ARRAY gecastet und dann "ganz normal" verwendet.

Nun tut es so wie gewünscht.