Zeichenfolge aus C++-DLL an C#-DLL übergeben

BernhardBecker

Grünschnabel
Hallo,

ich möchte aus einer c++-DLL eine Zeichenkette an eine c#-Routine übergeben und komme nicht weiter. Meine Idee bisher:

Code der c#-Routine :
Code:
        [DllImport("...controller.dll")]
        public static extern bool FCgetWorkDir(StringBuilder dir);
        ...
if (FCgetWorkDir(dir) != true)
            {
                throw new Exception("Error");
            }
die Variable "dir" möchte ich in der c#-Routine weiter verwenden.

c++-Code der DLL:
Code:
dllexp bool FCgetWorkDir(char dir[255])
{
dir = "Pfadangabe";
return true;
}

Ich bin dankbar für Eure Hilfe!

Gruß

Bernhard
 
Zuletzt bearbeitet:
kriegst du den irgendwas raus? oder Fehlermeldung?

könntest auch probieren
Code:
[DllImport("...controller.dll")]
        public static extern bool FCgetWorkDir([Out] char[] dir);

Aber ich glaube in der C++ DLL musst du Pointer verwenden damit es funktioniert.

Edit:
Code:
dllexp bool FCgetWorkDir(char dir[255])
Als Parameter in C++, müsst du es eher
Code:
char[] dir
oder
Code:
char* dir
übergeben und die Länge des Array dann ermitteln oder direkt als extra Parameter.
Aber da besser nochmal in nem C++ Thread nachfragen ^^
 
Zuletzt bearbeitet:
Danke schon mal!
Wenn ich es so mache:
C#-Code
Code:
public static extern bool FCgetWorkDir([MarshalAs(UnmanagedType.LPStr)] out StringBuilder dir);

if (FCgetWorkDir(out dir) != true)
            {
                throw new Exception("Error");
            }
bekomme ich für die Variable "dir" schon mal Null raus, sie verändert sich also. Aber selbst, wenn die C++-Funktion der DLL "false" zurückgibt, wird die Exception nicht erreicht.
Ich probiere mal weiter ...
 
ich meinte mit out nicht die Out Anweisung/Operator (keine Ahnugn was genau das ist :rolleyes:)
Ich meinte [Out] Attribute und angewandt auf ein char Array.
StringBuilder braucht meines Wissen das glaube nicht.

Aber wie gesagt ich glaube das Hauptproblem ist das du bei der C++ DLL nicht mit Pointer arbeitest.
 
Zurück