Daten zwischen zwei *.c files copieren.
-
alduro01 schrieb:
das ganz würde so funktionieren, wenn ich die funktion, von mir aus "myFunc",
irgendwo nach der Definition
double myFunc(char c) { c='bla'; return c; }
mit
myOutput myFunc();
aufrufen würde. Oder nicht ? Dann würde doch in myOutput der string 'bla' stehen.
Nein. Eine Zuweisung notiert man, indem man den Zuweisungsoperator '=' benutzt. Wenn du einer Variablen i einen Wert 5 zuweisen willst, schreibst du ja auch nicht "i 5;", sondern "i=5;". Folglich müsstest du z.B. "double d=myFunc();" schreiben.
Nochmal der ganz dringende Tipp: bevor du anfängst, solchen Kram in C zu programmieren (bzw. Fremdcode zu verwenden), musst du erstmal wenigstens die Grundlagen beherrschen. Eine Wertzuweisung ist quasi die erste Seite (und da wahrscheinlich ganz oben) eines Tutorials. Du wirst nicht weiterkommen, wenn es weiterhin so versuchst. Ohne die Basics zu lernen, kommt man leider selten zum Ziel.
alduro01 schrieb:
Ich compiliere das *.c File zu einer custom solver *.dll und importiere das dann in ADAMS.
Somit ruf ADAMS meine Funktion (oder deine myFunc) auf. Auf diesen Aufruf habe ich aber keine Zugriff. Also auch nicht auf die Variable die zurückgeliefert wird.Ich kenne ADAMS nicht. Was ist das denn? Wieso kannst du eine Funktion aufrufen, deren Rückgabe aber nicht speichern und einer weiteren Funktion übergeben? Erklär das mal genauer.
Zur Not könntest du dY vielleicht auch global deklarieren und in der zweiten Datei über "extern" holen. Die Rückgabe wäre aber besser...
-
Hier die einfache Maschinenbauerlösung :
(Ich weiß, geht bestimmt auch schöner, aber dass tuts auch)#include "slv_c_utils.h" #include "math.h" adams_c_SFOSUB Sfosub; double transfer[8]; void Sfosub(const struct sAdamsSforce* sforce, double time, int dflag, int iflag, double* value) { /* Assign impact parameters to readable variable names */ double stiff1 = sforce->PAR[3]; double stiff2 = sforce->PAR[4]; double expont1 = sforce->PAR[5]; double expont2 = sforce->PAR[6]; double bound = sforce->PAR[7]; /* Load up ipar for call to sysfnc for DZ( PAR(1), PAR(2), PAR(3) ) */ int ipar[3]={(int)sforce->PAR[0],(int)sforce->PAR[1], (int)sforce->PAR[2] }; int errflg; double dy_temp; double dy; double use_stiff; double use_expont; /* Call SYSFNC for displacement */ c_sysfnc("DY", ipar, 3, &dy_temp, &errflg); c_errmes(errflg, "Error getting disp. in SFOSUB.", sforce->ID, "STOP"); dy = dy_temp - 50.0; if (dy < 0 ) { dy = dy * -1.0; } *value=pow(dy,expont1)*stiff1; transfer[0]=dy; transfer[1]=*value; } adams_c_REQSUB Reqsub; void Reqsub(const struct sAdamsRequest* adamsreq, double TIME, int IFLAG, double* OUTPUT) { OUTPUT[0]=transfer[0]; OUTPUT[1]=transfer[1]; OUTPUT[2]=0; OUTPUT[3]=0; OUTPUT[4]=0; OUTPUT[5]=0; OUTPUT[6]=0; OUTPUT[7]=0; }
Matze, wenn dich ADAMS interessiert, dann schau mal hier :
Grüße
-
Also sind jetzt doch beide Funktionen in einer Datei?
-
Matze,
schau dir mal den zweiten Post in diesem Thread an ....
-
alduro01 schrieb:
Matze,
schau dir mal den zweiten Post in diesem Thread an ....
Hehe, ok, hab ich übersehen...
-
Isch kriege ganz dolle Kopfschmerzen nach dem Lesen hier
und kapiere nicht worum es eigentlich geht. Mal schauen wie das ausgeht...meinen Respekt an Matze hier...halt durch
-
justchris schrieb:
Isch kriege ganz dolle Kopfschmerzen nach dem Lesen hier
und kapiere nicht worum es eigentlich geht. Mal schauen wie das ausgeht...meinen Respekt an Matze hier...halt durch
Wie, es geht noch weiter?! Aaaahhh....
Nee, ich glaube wir sind durch. Er hat eine funktionierende Lösung (Globale), und gut is'. Mehr will er glaub ich nicht.
-
justchris schrieb:
Isch kriege ganz dolle Kopfschmerzen nach dem Lesen hier
und kapiere nicht worum es eigentlich geht. Mal schauen wie das ausgeht...meinen Respekt an Matze hier...halt durch
Wenn du wirklich mal sehen willst, wie stark mein Durchhaltevermögen ist, dann sieh dir diesen Monster-Thread hier mal an (überflieg ihn wenigstens):
Davon werde ich meinen Enkeln noch erzählen. Ich war am Ende meiner Kräfte...
-
Hi Matze,
ich habs mal grob überflogen und denke du hättest echt das Zeug und die Geduld aus wirklich jedem, der grad mal "C" sagen kann, ein C-Programmierer zu machen
Da bewahrheitet sich mal wieder die Weisheit das man ohne Wissen über die Architektur und das Maurerhandwerk kein wirklich gutes Haus hin bekommen wird.
-
justchris schrieb:
Da bewahrheitet sich mal wieder die Weisheit das man ohne Wissen über die Architektur und das Maurerhandwerk kein wirklich guten Haus hin bekommen wird.
und auch nicht ohne einen geduldigen online-lehrer.