' schrieb:In der DLL wird der Speicher für den Error-Buffer festgelegt und übergibt mir dann eine Fehlermeldung.
In deinem Falle könnte folgendes funktionieren.
char** übergibt dir einen Pointer auf einen Speicher, der den Pointer auf den Fehlerpuffer enthält. Es gibt ein spezielles VI, MoveBlock, das dein Problem vielleicht lösen könnte.
Deklariere im DLL-Knoten den Parameter als "U32, Wert" (also ein ganz normaler Rückgabewert). Dieser Wert entspricht (und das weist ber nur du, nicht das Programm) dem Pointer auf den Pointer. Diesen Wert gibst du auf den MoveBlock und lässt dir 4 Zeichen (Pointergröße unter Win32) geben. Aus diesen 4 Zeichen machst du eine Zahl, die dann dem Pointer auf den Errorpuffer entspricht. Diese neue Zahl gibt du wieder auf den MoveBlock und lässt dir so den Errorpuffer geben.
Zwei Probleme treten auf. Erstens: das SubVI mit MoveBlock muss du selbst mal suchen.
Zweitens: Woher weis der zweite MoveBlock, wie groß der Errorpuffer ist? Im allerschlimmsten Falle musst du MoveBlock sooft aufrufen, bis ein Null-Byte (Ende eines char*) zurück gegeben wird.
Ich empfehle, vor jedem Start des Programms alle Sources zu speichern. Mit Pointer zu arbeiten ist immer kritisch. Lass dir vor dem Implementieren eines MoveBlocks den Pointerwert anzeigen - zum Kucken, ob er einen sinnvollen Wert enthält.