Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C++CLI / VB .Net / .Net-Framework » konvertierung C# String[] returned to c++ managed Code

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
05.05.2008, 13:49 Uhr
~essi
Gast


Hallo,

ich habe einige Test-Methoden in c# geschrieben und versuche mit Managed c++ drauf zugreifen.
Mit der einfachen Rückgabewerte, wie integer, String funktioeren aber z.b mit Array geht nicht.

Weiss jemand eine Lösung?

hier Coucecode:

//------------- C# -------------

public class CSharpHelloWorld
{
public CSharpHelloWorld() { }

public String[] GetArray(){
String[] number = { "test1", "test2", "test3", "test4" , "test5" };
return number;
}

public int Addieren(int x, int y)
{
int summe = x + y;
return summe;
}

public double Multipizieren(double x, double y)
{
double multip = x * y;
return multip;
}
}


//--------------Managed c++------

#using <mscorlib.dll>
#using "CSharpHelloWorld.netmodule"

extern "C" __declspec(dllexport)int callAddieren(int x, int y);
extern "C" __declspec(dllexport)double callMultipizieren(double dX , double dY);


extern "C" __declspec(dllexport) ? callGetArray();


int callAddieren(int x , int y) {
CSharpHelloWorld ^t = gcnew CSharpHelloWorld();
return t->Addieren(x,y);
}

double callMultipizieren(double x , double y) {
CSharpHelloWorld ^t = gcnew CSharpHelloWorld();
return t-> Multipizieren(x , y);

}


? callGetNumbers(){
CSharpHelloWorld ^t = gcnew CSharpHelloWorld();
return t-> GetNumbers();

}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.05.2008, 14:13 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)



Zitat von ~essi:

Mit der einfachen Rückgabewerte, wie integer, String funktioeren aber z.b mit Array geht nicht.

"Geht nicht" ist keine ausreichende Fehlerbeschreibung um dir rigendwie helfen zu können. Was genau hast du wie probiert und was ist passiert?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.05.2008, 14:29 Uhr
~essi
Gast



Zitat von Guybrush Threepwood:
[quote ~essi]
Mit der einfachen Rückgabewerte, wie integer, String funktioeren aber z.b mit Array geht nicht.

"Geht nicht" ist keine ausreichende Fehlerbeschreibung um dir rigendwie helfen zu können. Was genau hast du wie probiert und was ist passiert?[/quote]


Also die zwei Methoden in Managed C++(callMultipizieren,callAddieren) rufen die Methoden (Multipizieren,Addieren) in c#. Bei dieser zwei Methoden funktioniert den Aufruf. D.h Beim Aufruf der Methode callAddieren(2,3) bekomme ich 5.

Aber bei der andere Methode callGetNumbers() habe ich so versucht : array<String> callGetNumbers(), dann kommen die Fehler:

error C3149: "System::String": Dieser Typ kann ohne "^" der obersten Ebene hier nicht verwendet werden.
error C3149: "cli::array<Type,dimension>": Dieser Typ kann ohne "^" der obersten Ebene hier nicht verwendet werden.
error C3395: "callGetNumbers": __declspec(dllexport) kann nicht mit der __clrcall-Aufrufkonvention auf eine Funktion angewendet werden.
error C2440: 'return': 'System::Array ^' kann nicht in 'cli::array<Type,dimension> ^' konvertiert werden
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.05.2008, 16:21 Uhr
Tommix



Hallo,

C++:
array<String^>^ callGetNumbers()



Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
05.05.2008, 17:00 Uhr
0xdeadbeef
Gott
(Operator)


Das ist alles sehr faszinierend, hat aber mit Standard-C++ nicht das geringste zu tun. -->
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
06.05.2008, 08:34 Uhr
~essi
Gast


Hi Tommix,

das habe ich auch probiert.
Kommt die Fehler:
error C3395: "CallGetNumbers()": __declspec(dllexport) kann nicht mit der __clrcall-Aufrufkonvention euf eine Funktion angewendet werden.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
06.05.2008, 16:30 Uhr
Tommix



Hi,

Zitat von MSDN:

Compilerfehler C3395
__declspec(dllexport) und __clrcall sind nicht kompatibel


Falls Du auf die Tour eine normale DLL bauen willst, muß das in etwa so aussehen:

C++:
#pragma managed

int callCSAddieren(int x , int y)
{
    CSharpHelloWorld ^t = gcnew CSharpHelloWorld();
    return t->Addieren(x,y);
}

#pragma unmanaged

extern "C" __declspec(dllexport)int callAddieren(int x, int y);

int callAddieren(int x, int y)
{
    return callCSAddieren(x, y);
}


- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C++CLI / VB .Net / .Net-Framework ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: