Thread XS und C++ Code (8 answers)
Opened by reinhardp at 2018-11-06 13:50

reinhardp
 2018-11-10 17:55
#189175 #189175
User since
2016-01-20
7 articles
BenutzerIn
[default_avatar]
2018-11-06T21:32:02 Raubtier
2018-11-06T13:04:58 GwenDragon
Dein Code des Makefile.PL für den Compiler ist doch:
Quote
Code: (dl )
    'CC'        => 'cl -TP -EHsc -GA3s -W3',

https://metacpan.org/source/RPAGITSCH/Win32-File-S...

Ungetestet: c++ statt cl nehmen. bei den Schaltern weiß ich jetzt nicht.

Der MSVC-Compiler heißt aber cl.exe. Nur sind die Schalter eigentlich alle mit / statt -. Und /TP heißt, dass eine C++-Datei erwartet wird. Siehe https://msdn.microsoft.com/de-de/library/fwkeyyhe....

Wie lautet denn die Fehlermeldung? MSVC war früher recht, ähm, flexibel, was die Interpretation des C++-Standards angeht, ist inzwischen aber da sehr streng.

Edit: ah, du willst mingw nehmen. Normalerweise erkennen die Compiler ja an der Dateiendung, welche Sprache es ist. Ich sehe aber kein cpp/cxx/cc bei dir. Versuch mal, dem Compiler -std=c++14 (eine Zahl aus 98, 03, 11, 14, 17 (oder 0x für 11, 1y für 14, 1z für 17 (für die Betas) bzw 2a für die Zukunft)) anzugeben; Warnungen sollten mit -Wall -Wextra -Wpedantic gehen (bei älteren Compilern -pedantic statt -Wpedantic). Und sollte das aber nicht CXX statt CC sein? So kenne ich das zumindest von Makefiles. (Bin aber mit Perl/Windows und XS sehr unerfahren)

Edit2: Ein paar Anmerkungen zu deinem Summary.h / Summary.xs:

  • In C++ braucht man kein void zu schreiben für 0-argumentige Funktionen
  • Vermeide new&delete, insbesondere hast du ein Speicherleck in Zeile 66/67 in Summary::Summary (new, dann Aufruf von substring). Die substring-Funktion selbst ist auch mehr als fragwürdig - du musst das Ergebnis sofort wegkopieren, sonst kannst du sie nur 1x verwenden oder änderst jedes Mal das Ergebnis; static storage duration ist nicht einmal thread safe. Viel schlimmmer noch: du deletest ggf. den falschen Speicher (den statischen von substring statt den dynamischen)!
  • NULL heißt in C++ nullptr
  • Du solltest Dinge mit "const" markieren, die const sind, also insbesondere die char*-Parameter.
  • Bestimmt noch viel mehr... :-(


Danke,
aber damals mit dem MS Compiler war das nicht so genau. Ich würde das Modul gerne auf den neuesten Stand bringen. Aber dann würde ich sehr viel Hilfe brauchen Ich hatte es auch mal einem "Co-Author" übergeben, aber wie es aussieht hatte er keine Zeit oder was auch immer.

Wen es hier jemanden geben würde der meine Module warten würde, bitte melden. Die letzte Perlversion die mein Modul unterstützt ist v5.16.3.
Ich habe hier damit kein Problem, aber leider jemand anders der auch Perl v5.16.3 verwendet.

Liebe Grüße,
Reinhard


Danke,
Reinhard

View full thread XS und C++ Code