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