Dll mit 'string' als Übergabeparameter by Ref

Hallo C-Entwickler,
ich habe folgendes Problem:
ich muß eine dll schreiben, von der ich u.a. einen 40-stelligen ‚String‘ zurück bekomme.
Da ich ja kein char-Array als Rückgabewert angeben kann, will ich den string als Übergabeparameter ‚by Reference‘ übergeben.
Das sieht dann so aus:
(char *dateiPfad, char **rueckgabe[40])
‚rueckgabe‘ ist die Variable, die einen Wert zurückgeben soll.
Wenn ich die dll nun aufrufe, geht das auch so lange gut, wie ich am Inhalt von ‚rueckgabe‘ nix verändere. Sobald ich ( bzw. die dll) den Inhalt ändert, bekomme ich die Fehlermeldung: ‚Die Anweisung in „0x…“ verweist auf Speicher „0x…“ Der Vorgang „written“ konnte nicht auf dem Speicher durchgeführt werden.‘
Kennt jemand dieses Problem ? Die dll rufe ich übrigens aus einem VB-Programm heraus auf.

Wäre sehr dankbar für jede Art von Hinweis.
Gruß
Matthias

BSTR
Meines Erachtens muß man hier für Strings den Variablentyp BSTR verwenden.
Das Zusammenspiel von VB und C ist hier etwas schwierig.
Man kann dann auch nicht einfach in Strings 'reinschreiben, sondern braucht Funktionen wie SysReAllocString etc. Siehe hierzu die Hilfe bzw. suche nach diesen Begriffen. Es ist ein ziemliches Gepopel mit Strings und DLLs.

Hier ein kleines Beispiel (liest ein CString z.B. aus einer Datenbank und gibt diesen über ein BSTR by Reference an Basic zurück)

short __stdcall ReadRecord(BSTR* string)
{
CString str=„einString“
SysReAllocString(string, BSTR(LPCTSTR(str)));
return -1;
}

und aus Basic:
Private Declare Function ReadRecord Lib „DieLib.dll“ (str As String) As Integer

der doppelte stern wuerde mich bei **rueckgabe [40] zunaechst mal ‚stoeren‘. damit koenntest du in diesem falle unheil anrichten. wo greifst du bzw die dll dann vermeintlich hin?
gruss - digi

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

achja, der ‚string‘.
der ‚string‘ ist NICHT einfach eine kette von ascii-zeichen.
nein, der hat am anfang noch einen eintrag ueber die laenge
des strings (normalerweise 2 bytes).

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]