[VS8 C++] strcpy_s Problem

SunnyBunny

Mitglied
Huhu,

ich habe ein Problem. :)

Code:
strcpy_s(szSelectedReaderName, (LPCTSTR) pbyReaderNames+StringLen);

szSelectedReaderName ist ein char [100],
pbyReaderNames ist ein PBYTE und
StringLen ist ein unsigned int.

Tja in der .exe zum Ausprobieren funktionierte es einwandfrei.
Nun habe ich das Ganze in eine DLL umgebaut und es kommt plötzlich folgende Fehlermeldung:

error C2665: "strcpy_s": Durch keine der 2 Überladungen konnten alle Argumenttypen konvertiert werden.
1> c:\programme\microsoft visual studio 8\vc\include\string.h(73): kann 'errno_t strcpy_s<100>(char (&)[100],const char *)' sein
1> bei Anpassung der Argumentliste '(char [100], LPCTSTR)'

Verstehe das leider nicht 100%ig, da ich einige Teile des Programmes aus Beispielcode genommen habe, wieso funktioniert der Cast in der EXE und nicht in der DLL, und wie behebe ich das?

Schnelle Hilfe wäre supi. Danke Sunny!
 
Hallo SunnBunny

nach der MSDN Beschreibung müsste als 2. Parameter die Länge deines Zielbuffers anggeben werden.

strcpy_s((char*)ziel,100,(char*)quelle);
 
Danke, und na OK, das hat geholfen auf den richtigen Weg zu kommen, mit:

Code:
strcpy_s(szSelectedReaderName,100,(const char*)pbyReaderNames+StringLen);

meckert der Kompiler zumindest nicht mehr.


Dennoch verstehe ich nicht wieso es in einer EXE wie oben im ersten Post geht, und in der DLL muss ich alles anders aufbauen.

Zudem kommt nun das nächste, was auch in der EXE funktioniert aber in der DLL nicht:

Code:
CString einstring;
char einchar[5];
einstring = "4";
strcpy(einchar,einstring);

Da kommt wieder die Fehlermldung mit den Überladungen.
habs dann auch schon mit:
Code:
strcpy(einchar,sizeof(einchar),einstring);
und
Code:
strcpy(einchar,sizeof(einchar),(const char*)einstring);
und
Code:
strcpy(einchar,5,einstring);

probiert. Nichts geht, immer der gleiche Fehler:
Fehlermelduing, das CString nicht in const char* konvertiert werden kann.

Wenn nicht mit strcpy womit dann?

Ich versteh das nicht... gibt es irgendeinen Header den ich vergessen habe, oder muss ich in der DLL erst irgendeinen Befehl setzen, damit alles "normal" funktioniert?
 
Hallo SunnyBunny

ich gehe davon aus, dass mit visual studio 2005 arbeitest.

Arbeitest Du mit uni oder ansi Code? Falls Du mit unicode arbeitest, probiers mal damit

CString einstring;
TCHAR einchar[5];
einstring = "4";
wcscpy(einchar,einstring);
return TRUE;


oder mit ansi-code
über Menu
projekt->einstellungen->allgemein->zeichensatz : multibyte zeichensatz verwenden
 
Hui, ein richtig dickes Dankeschön!

Peinlich, ich wusste gar nicht das es da Unterschiede gibt.

Habe bisher wohl immer "multibyte zeichensatz" verwendet, aber in der DLL war UNICODE ausgewählt. Umgestellt, alten Zustand wieder hergestellt, und taadaaa, alles funktioniert.

Das lößt wohlmöglich auch ein anderes Problem dass ich mit nem anderen größeren Projekt hatte. Vielen Dank nochmal.
 

Neue Beiträge

Zurück