AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein C++: Parameterübergabe an WritePrivateProfileString
Thema durchsuchen
Ansicht
Themen-Optionen

C++: Parameterübergabe an WritePrivateProfileString

Ein Thema von R2009 · begonnen am 17. Dez 2009 · letzter Beitrag vom 17. Dez 2009
Antwort Antwort
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#1

C++: Parameterübergabe an WritePrivateProfileString

  Alt 17. Dez 2009, 05:35
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
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: C++: Parameterübergabe an WritePrivateProfileString

  Alt 17. Dez 2009, 08:16
Ich kenne mich mit C/C++ nicht aus, aber klappt es, wenn Du den String mit strcpy o.Ä. in ein kompatibles Array of char kopierst?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#3

Re: C++: Parameterübergabe an WritePrivateProfileString

  Alt 17. Dez 2009, 08:56
Hi,
ich habe eine Lösung gefunden!

Delphi-Quellcode:
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);
}
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]).
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
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#4

Re: C++: Parameterübergabe an WritePrivateProfileString

  Alt 17. Dez 2009, 09:29
Hi,
ich musste wtoc nocheinmal anpassen:

Delphi-Quellcode:
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));
}
Grüsse
Rainer
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: C++: Parameterübergabe an WritePrivateProfileString

  Alt 17. Dez 2009, 09:37
...dann editiere doch bitte Deinen vorherigen Beitrag, dann haben wir nur noch eine in sich korrekte Lösung und nicht x Nachträge.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#6

Re: C++: Parameterübergabe an WritePrivateProfileString

  Alt 17. Dez 2009, 10:12
OK Daniel,
ist aber auch blöd von mir! habs im Original korrigiert.

Grüsse
Rainer
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz