PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++]GetPrivateProfileString(error..)



GAFO
28.04.2012, 12:48
Hey, wollte mal fragen, wie ich den Fehler in diesem QC behebe




#include "windows.h"


char EinPfad[500];
char Nochwas[500];
char Test[500];
DWORD destSize;
destSize=500;

GetPrivateProfileString("common","C:\\Users\\","NULL",EinPfad,destSize,"test.ini");
//GetPrivateProfileString("common","Nochwas","NULL",Nochwas,destSize,"test.ini");
//GetPrivateProfileString("bla","test","NULL",Test,destSize,"test.ini");
"EinPfad" steht für einen beliebigen Pfad .. c:\\ ..


error C2664: 'GetPrivateProfileString': Konvertierung des Parameters 1 von 'const char [7]' in 'LPCTSTR' nicht möglich

Surflam
28.04.2012, 13:10
Hab dein Source mal bissel Fixed, jetzt funktioniert es.
Glaube allerdings du hast den aufbau einer Ini-Datei nicht ganz verstanden.. wäre das möglich?
Wayne hier der Source:
#include <iostream>
#include <windows.h>
using namespace std;

char EinPfad[500];
char Nochwas[500];
char Test[500];
DWORD destSize=500;

int main(){
GetPrivateProfileString("common","Part2","NULL",EinPfad,500,"./test.ini");
cout<<EinPfad<<endl;
cin.get();
}
Und hier die test.ini



[common]
Part2=Dein_Pfad

GAFO
28.04.2012, 13:17
ok+ danke, ich geh mal werkeln ;)

EDIT:
hab deine edit gelesen, muss es nur in eine visual c++ anwendung einbauen
also:


private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {

char EinPfad[500];
char Nochwas[500];
char Test[500];
DWORD destSize=500;


GetPrivateProfileString("common","Part2","NULL",EinPfad,500,"./test.ini");




}

aber dann tritt wieder der convert-fehler auf:


error C2664: 'GetPrivateProfileString': Konvertierung des Parameters 1 von 'const char [7]' in 'LPCTSTR' nicht möglich
1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.

Surflam
28.04.2012, 13:48
Poste mal deinen gesammten Source auf pastebin.com oder so, kann mit deinem bisherigen Source nicht viel anfangen, der Fehler scheint wo anders als in dem Code den du gepostet hast zu liegen :confused:

GAFO
28.04.2012, 13:58
hier das just-funktion project
http://www.file-upload.net/download-4309542/INI-Ausleser.rar.html

Surflam
28.04.2012, 15:06
Ich Programmier sonst in Devc++ und nicht mit Visual C++ deswegen hab ich nicht sonderlich viel Ahnung davon, kann dir aber erklären was den Fehler verursacht.

GetPrivateProfileString wurde von Visual C++ dekladiert, die richtigen Api funktionen heißen eigendlich GetPrivateProfileStringW oder GetTPrivateProfileStringA ,jeweils für Unicode und jemals ohne Unicode. Jetzt kannst du Theoretisch vor deine Strings (z.b "Part2" jeweils ein L setzen,also z.b L"Part2") um das als Unicode zu kennzeichnen . So ließ es sich bei mir dann Compilieren, das problem dabei ist jedoch das es nen Lesefehler gibt ("Geschützter Systemspeicher" bei ner ini datei, ja ne is klar).. Schau einfach mal, bekommst du sicher besser hin als ich.

IRET
28.04.2012, 15:07
Wahrscheinlich hast du Unicode als Kodierung eingestellt. Entweder du verwendest auch Unicode oder du stellst es in den Projekteinstellungen von "Unicode" auf "Multibyte".

GAFO
28.04.2012, 15:45
wie macht man das ? :* habs noch nicht so mit änderungen am compiler <..< hab bisher immer die standarteinstellungen benutzt ..

IRET
28.04.2012, 15:56
Weiß ich jetzt nicht genau. Bei Projekt -> Projekteintellungen oder so.
Dann öffnet sich ein Fenster und ich glaube gleich im Standard-Tab kann man das ändern.

Surflam
28.04.2012, 15:57
Oben auf Project->Properities->Configuration Properities->Characterset

GAFO
28.04.2012, 16:15
http://www10.pic-upload.de/28.04.12/ah4ft1nc5.png


hmmm da sind keine char einstellungen

Surflam
28.04.2012, 17:37
Du sollst auch auf "Konfigurationseigenschaften" und nich auf Konfiguration! *kopfschüttel*

k0rxxx
29.04.2012, 02:37
http://www.a-m-i.de/tips/strings/strings.php
probier deinen Stringparametern mal ein L voranzustellen.
Also
L"common"

Surflam
29.04.2012, 11:44
http://www.a-m-i.de/tips/strings/strings.php
probier deinen Stringparametern mal ein L voranzustellen.
Also
Hab ich ihm schon empfohlen :D
Sollte das alles nichts helfen kannst du ja aber noch versuchen die Einstellungen vorzunehmen, und dann jeweils ein LPCTSTR davor zu setzen wie du es z.b bei einem DWORD machen würdest. So z.b -> (DWORD)variable
damit das ganze sich Compilieren lässt. Mit Devc++ hättest du das ganz einfach machen können ohne die ganzen Fehler , nur kannst du da eben nicht die Fensterchen zusammenklicken sondern musst es selbst coden :lol

Grüße

GAFO
29.04.2012, 13:55
Du sollst auch auf "Konfigurationseigenschaften" und nich auf Konfiguration! *kopfschüttel*

"Konfigurationseigenschaften" sieht genau gleich aus, wie im pic die Konfiguration
edit: wenn du das im pic meinst ..

Surflam
29.04.2012, 16:05
Entweder du machst etwas falsch oder du hast ne falsche Version.. Sicher das du die 2010er Visual C++ hast?Bei der 2008er weiß ich nicht obs die Einstellung dort gibt.
http://img269.imageshack.us/img269/8563/visualc.png

GAFO
05.05.2012, 23:51
ich hab Microsoft Visual C++ 2010 Express auf Deutsch und da find ich sowas, wie in deinem Pic nicht

PS: lol bin seit 3 Tagen nicht auf die Page gekommen, idk warums net ging

Surflam
06.05.2012, 20:20
Das ging jedem so, Ddos und so..

pysnake
06.05.2012, 20:36
ich hab Microsoft Visual C++ 2010 Express auf Deutsch und da find ich sowas, wie in deinem Pic nicht

Wirklich nicht? Rechtsklick auf das Projekt -> Eigenschaften.

http://saved.im/mtg3mtewdzbp/unbenannt.png

Surflam
06.05.2012, 20:42
Glaube er stellt sich einfach nur doof an :neutral:
Wenn du möchtest, kann ichs dir Morgen oder so mal per Teamviewer schauen ;)

Leange
06.05.2012, 20:44
Sowie ich das sehe macht GAFO (http://free-hack.com/member.php?u=77132) nen Rechtsklick auf die Projektmappe und nicht auf das Projekt. ;)

Auf psysnake screen sieht mans gut, auf "tutzu" klicken, nicht auf "Projektmappe tutzu".

MfG Leange

Surflam
07.05.2012, 14:06
Man kann auch oben in der Statusleite auf "Projekt(e)" klicken,und dann auf Projekteigenschaften - öffnet das selbe fensterchen.

GAFO
08.05.2012, 17:11
hat geklappt !! einfach Visual c++ neu installiert LOL <..< :idee:eek::idee

jetzt ist nur noch der Punkt ungeklärt, wie man in


private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {

char EinPfad[500];
char Nochwas[500];
char Test[500];
DWORD destSize=500;


GetPrivateProfileString("common","Part2","NULL",EinPfad,500,"C:\Users\Lightning\Desktop\/test.ini");




}

EinPfad mit dem Text einer z.B. TextBox gleichsetzt, denn


tb1->Text = EinPfad;
// bzw
tb1->Text(EinPfad);


geht nicht

Surflam
08.05.2012, 19:51
sicher das du es richtig benannt hast?Ich hatte anfangs das Problem das ich nicht auf Groß/Kleinschreibung geachtet hatte und es dann deswegen nicht klappte.

GAFO
08.05.2012, 20:00
rror C2664: 'void System::Windows::Forms::Control::Text::set(System: :String ^)': Konvertierung des Parameters 1 von 'char [500]' in 'System::String ^' nicht möglich
1> Ursache: Konvertierung von 'char *' in 'System::String ^' nicht möglich

das müsste man iwie anders machen als, wie in dem bsp

Surflam
08.05.2012, 20:12
steht ja schon da was zu machen ist
"Konvertierung von 'char *' in 'System::String ^' nicht möglich"
Sprich du musst ein String und kein char* benutzen damit es funktioniert, da ein String erwartet wird. Oder du wandelst es bevor du es Anzeigst dann in ein String um (ging glaube ich mit variable.c_str();) ;)

GAFO
09.05.2012, 20:32
ja, selbst wenn ich da statt nem char array nen system-string benutze, also "String" kommt bei :


String EinPfad;


1>c:\users\lightning\documents\visual studio 2010\projects\na\ini-ausleser\ini-ausleser\Form1.h(96): error C3149: "System::String": Dieser Typ kann ohne "^" der obersten Ebene hier nicht verwendet werden.
1>c:\users\lightning\documents\visual studio 2010\projects\na\ini-ausleser\ini-ausleser\Form1.h(102): error C2664: 'GetPrivateProfileString': Konvertierung des Parameters 4 von 'System::String ^' in 'LPTSTR' nicht möglich