Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Frage an die Profis

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
08.04.2010, 21:38 Uhr
Hans1982



Hi,

ich bekomme beim Versuch eine DLL zu erzeugen folgende Syntax Fehler

1>cprogramme\microsoft visual studio 9.0\vc\include\cstring(21) : error C2059: Syntaxfehler: ':'
1>cprogramme\microsoft visual studio 9.0\vc\include\cstring(21) : error C2143: Syntaxfehler: Es fehlt '{' vor ':'

und

1>cprogramme\microsoft visual studio 9.0\vc\include\cstdio(46) : error C2059: Syntaxfehler: ':'
1>cprogramme\microsoft visual studio 9.0\vc\include\cstdio(46) : error C2143: Syntaxfehler: Es fehlt '{' vor ':'

und davon über 100 sodass die kompilierung abbricht. Ich gehe davon aus das es nicht an meinem Code hängt. Ich habe mal den Code rangehängt. Wahrscheinlich hängt es an dem Teil wo die Textdatei eingelesen wird und den dazugehörigen #include Anweisugen


C++:
#include <windows.h>
#include <math.h>
#include <string.h>
#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
#include <vector>
#include <stdlib.h>

int __declspec(dllexport) APIENTRY UserGrinDefinition(double *data);
int __declspec(dllexport) APIENTRY UserParamNames(char *data);

BOOL WINAPI DllMain (HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved)
    {
   return TRUE;
}

int __declspec(dllexport) APIENTRY UserGrinDefinition(double *data)
    {
  long double r, index, rKugel, nKritisch, aktMin, aktIndex, x, y, z, dx, dy, dz;

   x = data[1];
   y = data[2];
   z = data[3];
   nKritisch = data[10];
   rKugel = data[11];
   dx = data[12];
   dy= data[13];
   dz= data[14];

    if (dx > 0 && dy > 0 && dz > 0)
        {
        if (x > +0.5*dx) x -= dx*(double)ceil(+(x - 0.5*dx)/dx);
        if (x < -0.5*dx) x += dx*(double)ceil(-(x + 0.5*dx)/dx);
        if (y > +0.5*dy) y -= dy*(double)ceil(+(y - 0.5*dy)/dy);
        if (y < -0.5*dy) y += dy*(double)ceil(-(y + 0.5*dy)/dy);
        if (z > +0.5*dz) z -= dz*(double)ceil(+(z - 0.5*dz)/dz);
        if (z < -0.5*dz) z += dz*(double)ceil(-(z + 0.5*dz)/dz);
        }

using namespace std;
    //Einlesen der Textdatei und schreiben in eine Matrix
ifstream ifs("C:\\Simulationsergebnisse.txt");

  if (!ifs) {
    cerr << "Datei kann nicht geöffnet werden" << endl;
    exit(-1);
  }

  vector<vector<double> > matrix;
  while (ifs) {
    string line;
    getline(ifs, line);
    istringstream iss(line);
    vector<double> values;
    copy(istream_iterator<double>(iss),
         istream_iterator<double>(),
         back_insert_iterator<vector<double> >(values));
    if (values.size() > 0) matrix.push_back(values);
  }


r  = sqrt(x*x + y*y + z*z);

    if (r <= rKugel ){
        data[6] = 1;        
        data[7] = 0;
        data[8] = 0;
        data[9] = 0;
    }
    else{
        aktMin=1000.;
        for (int q = 0; q < matrix.size(); ++q){
            if (abs(matrix[q][0] - r)< aktMin){    
                aktMin = abs(matrix [q] [0] -r);
                aktIndex = q;
            }
        }
    index = sqrt(1-(matrix[aktIndex][1]/nKritisch));
    data[6] = index;
    data[7] = (sqrt(1-(matrix[aktIndex+1][1]/nKritisch))-sqrt(1-(matrix[aktIndex][1]/nKritisch)))
                /(matrix[aktIndex+1][0]-matrix[aktIndex][0])*x*index/r;
    data[8] = (sqrt(1-(matrix[aktIndex+1][1]/nKritisch))-sqrt(1-(matrix[aktIndex][1]/nKritisch)))
                /(matrix[aktIndex+1][0]-matrix[aktIndex][0])*y*index/r;
    data[9] = (sqrt(1-(matrix[aktIndex+1][1]/nKritisch))-sqrt(1-(matrix[aktIndex][1]/nKritisch)))
                /(matrix[aktIndex+1][0]-matrix[aktIndex][0])*z*index/r;
    }


   if (index < 0.0)
        {
        return -1;
        }

    return 0;
    }

int __declspec(dllexport) APIENTRY UserParamNames(char *data)
    {
    
    int i;
    i = (int) data[0];
    strcpy(data,"");
    if (i == 1) strcpy(data,"nKritisch");
    if (i == 2) strcpy(data,"rKugel");
    if (i == 3) strcpy(data,"Array dx");
    if (i == 4) strcpy(data,"Array dy");
    if (i == 5) strcpy(data,"Array dz");
    return 0;
    }



Vielleich weis ja jemand von euch die Lösung des Problems....

Vielen Dank schonmal für eure Mühe.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.04.2010, 21:46 Uhr
0xdeadbeef
Gott
(Operator)


Ich vermute stark, dass das Problem in der windows.h liegt - der Header macht andauernd Probleme mit dämlich benannten Makros wie min und max.

Versuch mal, den include-kram am Anfang so zu schreiben:

C++:
#include <math.h>
#include <string.h>
#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
#include <vector>
#include <stdlib.h>

#include <windows.h> // <-- windows.h ans Ende


...vielleicht bringt's das schon. Ansonsten hilft es oft, Teile der windows.h per Makro zu unterdrücken, etwa

C++:
#define WIN32_LEAN_AND_MEAN
#define NOMINMAX
#include <windows.h>
#undef NOMINMAX
#undef WIN32_LEAN_AND_MEAN


Siehe dazu auch http://support.microsoft.com/kb/166474/de
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 08.04.2010 um 21:47 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.04.2010, 22:24 Uhr
Hans1982



Vielen Dank für dein schnelle Antwort,leider funktioniert das auch nicht und die Fehler tretten immer noch auf.

Vielleicht ist es ja doch ein größeres Problem?

Dieser Post wurde am 08.04.2010 um 22:27 Uhr von Hans1982 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.04.2010, 23:01 Uhr
0xdeadbeef
Gott
(Operator)


Ansonsten kann ich nur raten, dass er vielleicht mit den alten C-Headern durcheinander kommt - vermutlich bindet einer der C++-Header <cstring> ein, und weil vorher schon string.h eingebunden wurde, kriegen die sich in die Haare. Versuch mal, stattdessen die C++-Äquivalente zu benutzen:

C++:
#include <cmath> // <--
#include <cstring> // <--
#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
#include <vector>
#include <cstdlib> // <--

#define NOMINMAX
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#undef WIN32_LEAN_AND_MEAN
#undef NOMINMAX

// Optional:
using namespace std;


Die Funktionen aus den betroffenen Headern liegen dann im Namensraum std, wenn du also die using-Direktive nicht verwendest, musst du beispielsweise std::ceil statt ceil schreiben.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 08.04.2010 um 23:03 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
09.04.2010, 08:22 Uhr
~f.-th.
Gast


Bevorzugen die DLL-Geschichten nicht C als bevorzugte Programmiersprache?

MfG f.-th.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
21.05.2010, 11:39 Uhr
problemlöser64



C++ ist die Erweiterung von C. Wenn jemand DLL's in C# oder Delphi oder so schreibt, hast f.-th Recht, aber selbst einige DLL's in Windows, wie zB. KERNEL sollen angeblich in C++ geschrieben worden sein, wie ich mal gehört habe. C und C++ ist sowieso fast das gleiche.
--
-Meine IP: 127.0.0.1 (Hackt mich doch!)^^
-Meine Maschine: Zuse Z3 ohne OS
-0x00f426e3 verweist auf 0x00000000 "read" nicht möglich, wenden Sie sich an den Systemadministrator
-Frag mich nicht, hab keine Ahnung^^
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
21.05.2010, 14:48 Uhr
0xdeadbeef
Gott
(Operator)



Zitat von problemlöser64:
C++ ist die Erweiterung von C. (...) C und C++ ist sowieso fast das gleiche.

Ich wünschte wirklich, diese blödsinnige Idee würde langsam verschwinden. Keiner, der C und C++ kennt, kann es ernsthaft behaupten; ich frage mich, wie es dieser Mythos schafft, am Leben zu bleiben. Es ist richtig, dass C++ viel von C erbt, aber weder ist aller C-Code auch als C++-Code kompilierbar, noch sieht guter C-Code gutem C++-Code auch nur entfernt ähnlich. Wenn du glaubst, C++ sei so eine Art C mit Klassen, solltest du dir schleunigst ein besseres Buch zu dem Thema besorgen.

Was DLLs angeht, die kannst du in so ziemlich jeder Sprache schreiben. Das Format und der Ladevorgang können sich unterscheiden - etwa sind .net-DLLs etwas umständlich in nativen Code einzubinden und umgekehrt, aber auf die eine oder andere Art lässt sich eine zur Laufzeit dynamisch ladbare Bibliothek schon umsetzen.

Native DLLs, wie sie hier wohl gemeint sind, sind in allen Sprachen machbar, die nativ kompiliert werden können. Es ist dabei üblich, C-Interfaces zu exportieren, wenn man die DLL dynamisch linken will (also per LoadLibrary und GetProcAddress), weil es damit so schön einfach ist (wohingegen etwa in C++ Funktionsnamen durch die Mangel gedreht werden, um Überladungen zu ermöglichen, die C nicht kennt), aber im Grunde kannst du exportieren, wozu du lustig bist.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
21.05.2010, 15:05 Uhr
ao

(Operator)



Zitat:
ich frage mich, wie es dieser Mythos schafft, am Leben zu bleiben.

Der wächst und gedeiht in Biotopen wie mikrocontroller.net. Da führen Leute das große Wort, die meinen, alles, was man braucht, ist ein guter Assembler, und C ist schon was für Warmduscher.

Von C++ wissen sie ungefähr so viel, dass es da nicht printf heißt, sondern cout und dass ein Helloworld ungefähr dreimal so groß ist wie in C, was beweist, dass C++ völlig unbrauchbar ist.

Schwer zu ertragen manchmal ...

Dieser Post wurde am 21.05.2010 um 15:07 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


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: