Einzelnen Beitrag anzeigen

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