Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

25.11.2015, 17:32

wcstombs_s Fehler

Hallo

Ich und cojo2015 programmieren gerade eine DirectX Applikation.
Wir sind momentan noch dran Direct3D zu initialisieren.

Als wird den Namen der Grafikkarte in einen character array konventieren wollten, spuckte das Programm einen Fehler aus.
Wir haben dazu wcstomb_s benutzt und die Werte stimmen überein mit der Parameterliste.

C-/C++-Quelltext

1
2
3
4
5
6
//Convert the name of the video card to a character array and store it
    error = wcstombs_s(&stringLength, m_VideoCardDescription, 128, adapterDesc.Description, 128);
    if (error != 0)
    {
        return false;
    }


Der Fehler lautet:
Error C2664 'errno_t wcstombs_s(size_t *,char *,size_t,const wchar_t *,size_t)': cannot convert argument 1 from 'unsigned int *' to 'size_t *'

Weiss irgendjemand was wir falsch machen?

PS: Wir haben schon probiert, den stringLength in einen size_t umzuwandeln, hat aber leider auch nichts gebracht

Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

2

25.11.2015, 17:45

PS: Wir haben schon probiert, den stringLength in einen size_t umzuwandeln, hat aber leider auch nichts gebracht


Wie habt ihr das versucht? Denn genau da liegt der Fehler. Sonst versuche mal null als ersten Parameter zu übergeben.

3

25.11.2015, 17:49

Wir haben es mit einem static_cast und mit dem (size_t) probiert.
Das komische ist, ich habe selber mal ein DirectX Programm erstellt wo ich es genau gleich hatte auch mit stringLength und dort hatte ich noch keine Fehler :crazy:

Eigentlich müsste es mit einem unsigned int(stringLength) passen.

Das mit dem NULL funktioniert aber so kann er die Direct3D Klasse nicht richtig initialisieren

C-/C++-Quelltext

1
2
3
4
5
6
//Convert the name of the video card to a character array and store it
    error = wcstombs_s(NULL, m_VideoCardDescription, 128, adapterDesc.Description, 128);
    if (error != 0)
    {
        return false;
    }


Wir brauchen das &stringLength, denn sonst funktioniert es nicht

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »SlyGamer72HD« (25.11.2015, 17:57)


Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

4

25.11.2015, 17:56

Eigentlich müsste es mit einem unsigned int(stringLength) passen.

Nein, eigentlich nicht. Die Methode erwartet ein size_t und kein unsigned int.

5

25.11.2015, 17:58

Das komische ist bei meinem anderen Programm hat es mit dem unsigned int stringlength geklappt

6

25.11.2015, 18:00

Ok jetzt hat es geklappt, hatte einen anderen Fehler drinnen und deshalb hat er die Direct3D Klasse nicht initialisiert^^

Danke viel mals :thumbup:

Tobiking

1x Rätselkönig

  • Private Nachricht senden

7

25.11.2015, 18:02

Auf einem 32-Bit System könnte es sein das size_t als unsigned int definiert ist. Auf einem 64-Bit System hingegen nicht. Deswegen ersetzt man size_t nicht mit irgendeinem anderen Typ. Es steckt eine Bedeutung dahinter: size_t kann die theoretisch maximale Größe eines Typs halten.

Ich frage mich aber auch ob ihr einen konkreten Grund habt mit multi byte char weiter zu arbeiten. Wide char ist meiner Erfahrung nach die einfachere und modernere Variante. Wenn ihr keinen konkreten Grund habt zu konvertieren, lasst das Format das ihr bekommt.

8

25.11.2015, 18:07

Ok wusste ich nicht @TobiKing

Habe mal die Projekteigenschaften von Unicode zu Multi byte geändert.
Mal schauen ob es besser ist.
Danke :thumbsup:

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

25.11.2015, 18:25

Das Problem von size_t und int Größen wird auch nicht behoben, indem man die String-Codierung umstellt.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

10

25.11.2015, 18:34

Hab ich auch nicht gesagt.
Ich habe es durch ein NULL ersetzt und jetzt klappt es.

Werbeanzeige