![]() |
C++: Parameterübergabe an WritePrivateProfileString
Hi alle,
könnte mir jemand erklären wie ich eine Variablenübergabe hinbekomme: extern "C" __declspec( dllexport ) int QtTestINI_write(char bla[255]) { int r; r = WritePrivateProfileString(bla, TEXT("EinPfad"), TEXT("huhu"), TEXT("c:\\test.ini")); return(r); } bla soll übergeben werden. Der Compiler meckert aber dass er den Datentyp nicht konvertieren kann. Grüsse rainer |
Re: C++: Parameterübergabe an WritePrivateProfileString
Ich kenne mich mit C/C++ nicht aus, aber klappt es, wenn Du den String mit
![]() |
Re: C++: Parameterübergabe an WritePrivateProfileString
Hi,
ich habe eine Lösung gefunden!
Delphi-Quellcode:
Für die Umwandlungen der Typen habe ich zwei eigene Funktionen, wtoc, wtoci geschrieben und diese an die Delphi Verhältnisse angepasst. In Delphi ist ein String immer eines länger ist als man annimmt (String[100] wird zu char test[101]).
void wtoc(char* Dest, TCHAR* Source, int SourceSize)
{ for(int i = 0; i < SourceSize; ++i) Dest[i+1] = (char)Source[i]; Dest[0] = char(SourceSize); } void wtoci(TCHAR* Dest,char* Source, int SourceSize) { for(int i = 0; i < SourceSize; ++i) Dest[i] = (char)Source[i+1]; } extern "C" __declspec( dllexport ) void QtTestDll_ShowDlg() { //ShowDlg(); } extern "C" __declspec( dllexport ) int QtTestINI_read(struct MyStruct *strct) { int r; TCHAR Test[255]; TCHAR Sektion[101]; TCHAR Steuerwort[101]; TCHAR Pfad[101]; INT destSize=100; wtoci(Sektion,strct->TestA,sizeof(strct->TestA)); wtoci(Steuerwort,strct->TestB,sizeof(strct->TestB)); wtoci(Pfad,strct->TestD,sizeof(strct->TestD)); r = GetPrivateProfileString(Sektion,Steuerwort,TEXT("HUHU"),Test,destSize,Pfad); wtoc(strct->TestA,Test,sizeof(Test)); return(r); } extern "C" __declspec( dllexport ) int QtTestINI_write(struct MyStruct *strct) { int r; TCHAR Inhalt[101]; TCHAR Sektion[101]; TCHAR Steuerwort[101]; TCHAR Pfad[101]; wtoci(Inhalt,strct->TestC,sizeof(strct->TestC)); wtoci(Sektion,strct->TestA,sizeof(strct->TestA)); wtoci(Steuerwort,strct->TestB,sizeof(strct->TestB)); wtoci(Pfad,strct->TestD,sizeof(strct->TestD)); r = WritePrivateProfileString(Sektion, Steuerwort, Inhalt, Pfad); return(r); } Ausserdem steht, in Delphi, an erster Stelle die Länge. Sollte jemand interesse daran haben bin ich gerne bereit mein Testtool und die DLLs zu veröffentlichen. Zurzeit läuft die Übergabe in beide Richtungen über ein struct. Als nächsten Schritt werde ich die Übergabe mit Pchar durchführen. Mein Facit: C++ ist eine Sch...sprache. Ich habe den Code korrigiert (siehe folgenden post). Vielen Dank an alle die mir geholfen haben (nicht nur in diesem Thread)! Grüsse Rainer |
Re: C++: Parameterübergabe an WritePrivateProfileString
Hi,
ich musste wtoc nocheinmal anpassen:
Delphi-Quellcode:
Grüsse
void wtoc(char* Dest, TCHAR* Source, int SourceSize)
{ for(int i = 0; i < SourceSize; ++i) Dest[i+1] = (char)Source[i]; Dest[0] = (char(SourceSize)); } Rainer |
Re: C++: Parameterübergabe an WritePrivateProfileString
...dann editiere doch bitte Deinen vorherigen Beitrag, dann haben wir nur noch eine in sich korrekte Lösung und nicht x Nachträge.
|
Re: C++: Parameterübergabe an WritePrivateProfileString
OK Daniel,
ist aber auch blöd von mir! habs im Original korrigiert. Grüsse Rainer |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz