GLBasic forum

Other languages => GLBasic - de => Topic started by: Schranz0r on 2008-Mar-10

Title: Eine Dll-Function die mit char* returned ?
Post by: Schranz0r on 2008-Mar-10
Hi Leutchen, und speziel Gernot!


Ich habe ein "leichtes" Problem mit der Umsetztung einer Function die wie folgt aussieht:

Code (glbasic) Select
char *BASS_GetDeviceDescription(
    DWORD device
);
Problem hierbei ist das char*, hab keine ahnung wie die Function aussehen muss....
Bei einen Parameter wärs ja leicht!

bei Name$:
Code (glbasic) Select
name_Str.c_str()Hab null Plan :(
Title: Eine Dll-Function die mit char* returned ?
Post by: Kitty Hello on 2008-Mar-10
Hehe.
Code (glbasic) Select
FUNCTION BASS_GetDeviceDescription$:
INLINE
   const char* pStr = BASS_GetDeviceDesctiption();
   if (pStr)
      return DGStr( pStr );
ENDINLINE
ENDFUNCTION
Title: Eine Dll-Function die mit char* returned ?
Post by: Schranz0r on 2008-Mar-10
Hmm Gernot geht nicht, da schmiert das Programm ab!

Code (glbasic) Select
INLINE
#define DLL "bass.dll"
#define DWord unsigned int
...
DECLARE_C_ALIAS(_BASS_GetDeviceDescription,DLL,"BASS_GetDeviceDescription",(DWord),char*);
...
ENDINLINE
Code (glbasic) Select
FUNCTION BASS_GetDeviceDescription$: device
INLINE
   const char* pStr = _BASS_GetDeviceDescription(device);
   if (pStr)
      return DGStr( pStr );
ENDINLINE
ENDFUNCTION
Title: Eine Dll-Function die mit char* returned ?
Post by: Kitty Hello on 2008-Mar-10
aha.
Was passiert, wenn Du die Zeile "if ... pStr); rauslässt? Evtl. schiert schon der Aufruf ab?
DECLARE_ALIAS (ohne _C_ evtl??)
Title: Eine Dll-Function die mit char* returned ?
Post by: Schranz0r on 2008-Mar-10
Es geht alles mit DECLARE_C_ALIAS, nur mit dem char* spinnt der rum...

Ohne das If ist es das gleiche... schmiert ab :(
Title: Eine Dll-Function die mit char* returned ?
Post by: sechsrad on 2008-Mar-10
denk dran, das ein string in  "c" immer mit einer +chr$(0) abschliessen muss.

ohne der null liest /schreibt er solange ein, bis er im speicher zufällig eine null findet oder schmiert ab.

mfg
Title: Eine Dll-Function die mit char* returned ?
Post by: Schranz0r on 2008-Mar-10
Wow sechsrad jetzt bin ich baff, du hast recht, und Gernot nämlich auch.

DECLARE_ALIAS und schon gehts!

Danke euch beiden !
Title: Eine Dll-Function die mit char* returned ?
Post by: bigsofty on 2008-Mar-10
Is this about using C strings from a DLL and storing them back in a GLB string variable?

Id be very interested in a quick run down in English of how you achieved this Schranz0r please?

P.S. It would be nice to have a GLB+C/C++ forum to collate all these valuable threads ;)
Title: Eine Dll-Function die mit char* returned ?
Post by: sechsrad on 2008-Mar-10
QuoteDanke euch beiden !
jetzt hilf du mir mal bei einer einfachen dll mit dec-c++ und das einlesen dieser dll von dev-c++ in glbasic.

kannste ja in der pn reinsetzen oder mail : sechsrad@arcor.de

danke.

mfg
Title: Eine Dll-Function die mit char* returned ?
Post by: trucidare on 2008-Mar-10
DECLARE
DECLARE_C
DECLARE_Alias
DECLARE_C_ALIAS

wie was funzt schau in die hilfe ist nicht schwer (thema inline)

exportieren der funktionen mit extern "C" __declspec(dllexport) in devcpp
Title: Eine Dll-Function die mit char* returned ?
Post by: sechsrad on 2008-Mar-10
in der dev-c++-hilfe steht nichts  vom erstellen einer dll, es ist auch keine demo im verzeichnis,  wo gibt es die dazugehörigen demos für dec-c++.
mit google finde ich nichts dev-c++ > dll erstellen.

es ist ein graus.

mfg
Title: Eine Dll-Function die mit char* returned ?
Post by: Schranz0r on 2008-Mar-10
Genau so wie es trucidare sagt!
Title: Eine Dll-Function die mit char* returned ?
Post by: Kitty Hello on 2008-Mar-10
Code (glbasic) Select
extern "C" __declspec(dllexport) int __stdcall foo(int i)
{
 return ++i;
}
...dann als DLL compilieren.

in GLBASIC:

Code (glbasic) Select
INLINE
DECLARE(foo, "my.dll", (int), int);
ENDINLINE

FUNCTION glb_foo: i
INLINE
return foo(i);
ENDINLINE
ENDFUNCTION
...so aus'm Kopf raus.
Title: Eine Dll-Function die mit char* returned ?
Post by: sechsrad on 2008-Mar-10
hallo, gernot, suuuper. danke. es läuft.

die erste dll mit dev-c++, klasse.

damit kann ich aufbauen.

mfg
Title: Eine Dll-Function die mit char* returned ?
Post by: Schranz0r on 2008-Mar-10
Na das will ich mal sehn!
Title: Eine Dll-Function die mit char* returned ?
Post by: sechsrad on 2008-Mar-10
wo gibt es eigentlich eine hilfe in deutsch für dieses dev-c++?

habe ein c-hilfe gefunden, die weicht aber in der syntax stark ab.

mfg
Title: Eine Dll-Function die mit char* returned ?
Post by: Schranz0r on 2008-Mar-10
gibts nicht, wenn du kein englisch kannst, solltest du eh nicht in C++ Programmieren !
Title: Eine Dll-Function die mit char* returned ?
Post by: sechsrad on 2008-Mar-10
das ist die glb-datei :

Code (glbasic) Select
b=glb_meine(23)

PRINT b,100,100
SHOWSCREEN

MOUSEWAIT

FUNCTION WeNeedOne:
ENDFUNCTION

INLINE
DECLARE(meine, "my-dll.dll", (int), int);
ENDINLINE

FUNCTION glb_meine: i
INLINE
return meine(i);
ENDINLINE
ENDFUNCTION
das ist die my-dll datei, die 14 wird addiert :

Code (glbasic) Select
extern "C" __declspec(dllexport) int __stdcall meine(int i)
{
 return i=i+14;
}
Title: Eine Dll-Function die mit char* returned ?
Post by: Schranz0r on 2008-Mar-10
und jetzt ?
Title: Eine Dll-Function die mit char* returned ?
Post by: Kitty Hello on 2008-Mar-10
Genau. Mach doch mal ein Tutorial für andere. Das hilft vielen die auch mal was mit C++ machen möchten weiter.
Title: Eine Dll-Function die mit char* returned ?
Post by: trucidare on 2008-Mar-10
Ich kann nur sagen es hängt nich davon ab ob man englisch kann oder nicht. Ich hab englisch 5 und kann atmega programmieren, ein wenig c++, fenix und etliche andere kleine dialekte.

Es hat rein gar null nix mit der bildung zu tun ob man programmieren kann oder nich. Ich hab auchn kleinen dachschaden... denke schneller als ich spreche kann mir absolut null nix merken das auch nur ein hauch mit englisch zu tun hat.

trotzdem kann ich kein atmega programmieren und roboter steruern... interessiert mich auch nicht. Aber ich kann das was ich können will. Der glaube kann berge versetzen (sagten meine eltern immer zu mir) und nun glaub ich das ich es schaffe eine gui zu portieren die auch funktioniert... und es sieht gut aus.

abgesehen davon geht probieren über studieren.. ich hab c++ per learning by doing gerlernt und es reicht ich schaff damit klar zu kommen und wenn ich hilfe brauch frag ich google wenn das nicht hilft dann frage ich in foren nach.
Title: Eine Dll-Function die mit char* returned ?
Post by: Kitty Hello on 2008-Mar-10
ch hatte Englisch 1, und kann keinen Videorekorder programmieren. Bin ich froh, dass die jetzt ausgestorben sind...
Title: Eine Dll-Function die mit char* returned ?
Post by: Schranz0r on 2008-Mar-10
LOL, Videorecorder waren ja ne wissenschaft für sich :D
Title: Eine Dll-Function die mit char* returned ?
Post by: trucidare on 2008-Mar-10
haaa ich konnte videorekorder mit 10 programmieren ;)
das is aber auch das einzige sonst hab ich immer alles __zerstört__
Title: Eine Dll-Function die mit char* returned ?
Post by: Schranz0r on 2008-Mar-10
Dito, im zerstören war/bin ich Weltklasse :D
Title: Eine Dll-Function die mit char* returned ?
Post by: sechsrad on 2008-Mar-12
Quotedenk dran, das ein string in  "c" immer mit einer +chr$(0) abschliessen muss.
siehst du, das weis man auch ohne englischkenntnisse !

mfg
Title: Eine Dll-Function die mit char* returned ?
Post by: Schranz0r on 2008-Mar-12
hmm......
Erklär mir doch mal bitte wieso, und warum das so ist!
Ich weiß es nämlich nicht.
Title: Eine Dll-Function die mit char* returned ?
Post by: sechsrad on 2008-Mar-12
das ist eine vereinbarung , man hätte auch eine 255 nehmen können als endanzeiger für einen string. ist eine sehr flexibel einrichtung um schnell den string auf 0-byte zu setzen oder bei einem langen string durch 0-teilungen diese ausgaben steuern, weil ja immer nur bis zur 0 ausgegeben wird . kann man schön mit tricksen.
Title: Eine Dll-Function die mit char* returned ?
Post by: Schranz0r on 2008-Mar-12
Versteh ich net :D
Erklär mal bitte genau !
Title: Eine Dll-Function die mit char* returned ?
Post by: Kitty Hello on 2008-Mar-13
Also in C ist ein string nur ein Zeiger auf das erste Zeichen. So, wie weißt Du jetzt, wo der String aufhört?
Gar net. Darum muss in C in String immer mimt einem '\0' (=0) abschließen.
Deine Funktion liefert aber einen String in dieser Form zurück, und wenn Du
mystring_Str = some_char_pointer;
machst, dann ist alles OK.
Title: Eine Dll-Function die mit char* returned ?
Post by: Schranz0r on 2008-Mar-13
Ahhhhhhhhhh, nice to know :D
Title: Eine Dll-Function die mit char* returned ?
Post by: trucidare on 2008-Mar-13
hmm bin ich denn der einzige der programmeirt ohne sowas zu wissen? Wenn was abstürzt war es falsch ist meine devise ;)
Title: Eine Dll-Function die mit char* returned ?
Post by: Schranz0r on 2008-Mar-13
Jow wenn was nicht geht, dann ist was falsch...
Klingt logisch :D
Title: Eine Dll-Function die mit char* returned ?
Post by: Kitty Hello on 2008-Mar-13
War das nicht bekannt? Naja, jetzt wisst ihr's:

char name[128] = "hallo";
-> Im Spicher ist jetzt ein 128 byte langer Platz, mit diesem Inhalt:
'h', 'a', 'l', 'l', 'o', 0,
name ist ein Zeiger auf das 'h'.
Title: Eine Dll-Function die mit char* returned ?
Post by: Schranz0r on 2008-Mar-13
Das ist doch bestimmt irgend so ein Quantenphysik-.. :D
Title: Eine Dll-Function die mit char* returned ?
Post by: trucidare on 2008-Mar-13
Ich weiß nur das das IRC RFC besagt das die strings mit \r\n enden mehr weiß ich nich ;)
Title: Eine Dll-Function die mit char* returned ?
Post by: Kitty Hello on 2008-Mar-13
Ja, das ist ein return/newline. Das sind 2 Zeichen, die in Windows einen Zeilenumbruch haben. Zusätzlich hat jeder String trotzdem in C ein \0 dran. Egal.
Title: Eine Dll-Function die mit char* returned ?
Post by: sechsrad on 2008-Mar-13
Quotereturn/newline
sozusagen :     a$="spiel"+chr$(10)+chr$(13)+chr$(0)

wenn ich ein string zb an eine c-dll übergebe. benutze ich auch für die com-übertragung zb.

mfg
Title: Eine Dll-Function die mit char* returned ?
Post by: Kitty Hello on 2008-Mar-14
chr$(0) gibt's nicht - den hängt GLBasic immer slebst an.
Statt chr$(10) kann man "\r" und statt chr$(13) = "\n" schreiben - wie in C++.
Title: Eine Dll-Function die mit char* returned ?
Post by: Schranz0r on 2008-Mar-14
Owned!

hehe, dann doch mal lieber die Finger ruhig halten...
Title: Eine Dll-Function die mit char* returned ?
Post by: sechsrad on 2008-Mar-14
Quotechr$(0) gibt's nicht - den hängt GLBasic immer slebst an
wenn ich vom atemageboard sende muss ich eine chr$(0) dranhängen sonst läuft der c-compiler ins nimmerleinsland.

konnte ich nirgends in glbasic nachlesen, das die "0" drangehängt wird. ist auch ungewöhnlich, weil zum senden an den atmega über das terminal brauche ich keine "0" , weil das display am atmega diese nicht braucht, aber dafür zum darstellen des textes unbedingt die chr$(13).

wer da in der elektronik drin hängt, so wie ich, der kennt dieses thema und die verschiedenen varianten. ist also nichts neues das hier und da verschiedene ausgaben stattfinden.


das heisst, wenn ich in glbasic ein string schreibe >  a$="test", ist hinter test eine "0" aber kein zeilenumbruch usw.?
wie kann ich jetzt die variablenadresse in glbasic ausmachen um mir den string einzeln ausgeben zu lassen, also kein typischen glbasic stringbefehl, die kenne ich.


Quotehehe, dann doch mal lieber die Finger ruhig halten...
nee, dafür stecke ich zu intensive in der materie, glbasic-roboter-atmegaboard-gp2x-robospaien und dazu noch basocm-compiler für den atmega und jetzt auch noch dev-c++, ist schon eine geile sache.