R
Hi,
ich habe eine Lösung (mit QT4 geschrieben):
Die Kollegen der Delphi-Praxis haben mir ganz schnell und unkonventionell geholfen.
Damit nicht nocheinmal jemand auf diese Typecastsch.. reinfällt hier ein Stück Code aus der man ersehen kann wie das Problem gelöst werden kann.
wtoc und wtoci habe ich selbst geschrieben (nach einer Vorlage aus dem Internet).
Das Teil soll eine DLL und aus Delphi heraus benutzt werden.
Achtung: diese Funktionen sind so modifiziert, dass Pascal-Strings übergeben werden können.
Pascal Strings speichern ihre Länge im ersten Byte, danach folgt der eigentliche String.
Sicher gibt es hier den einen oder anderen der das besser kann.
Würde mich freuen wenn das jemand optimieren könnte. Ich bin gerne bereit den Delphi Code zur Verfügung zu stellen.
struct MyStruct
{
char TestA[101];
char TestB[101];
char TestC[101];
char TestD[101];
int NumA;
int NumB;
int NumC;
char const* str;
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 ) 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);
}
Rainer