Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Variable Argumente in C (https://www.delphipraxis.net/15504-variable-argumente-c.html)

Assarbad 29. Jan 2004 20:38


Variable Argumente in C
 
Hi,

mit ... habe ich eine Liste variabler Argumente. Allerdings muß ich deren Typ zur Compile-Zeit kennen um sie zu verarbeiten. Wie schreibe ich eine Funktion wie printf() welche komplett variable Argumente (also auch variable Typen) annimmt, bzw wie kann ich erreichen, daß die Argumente von einem Makro oder meiner Funktion direkt an wsprintf() weitergegeben werden?!?

Luckie 29. Jan 2004 20:51

Re: Variable Argumente in C
 
Frag mal hier: C/C++-Forum. Die sind da eventuell etwas besser drauf diesbezüglich.

trifid 29. Jan 2004 21:00

Re: Variable Argumente in C
 
was mir noch nicht klar ist
willst Du das in C oder in Delphi realisieren ?

Luckie 29. Jan 2004 21:03

Re: Variable Argumente in C
 
In C, sonst stünde es nicht hier, sondern in einer Delphi Sparte. Ich denke mal, dass Assa schon darauf achtet, wo er hin postet. ;)

Stanlay Hanks 29. Jan 2004 21:04

Re: Variable Argumente in C
 
Aus dem Thread Titel "...in C und der Sparte (Programmieren allgemein => alles, was mit Programmieren zu tun hat, aber kein Delphi ist) schließe ich mal, er will es in C machen :wink:

Man liest sich, Stanlay :hi:

trifid 29. Jan 2004 21:08

Re: Variable Argumente in C
 
er könnte auch das wie vergessen haben
Variable Argumente wie in C
nunja ...

Code:
void test (const char *format, ...)
{
   int            nRC = 0;
   char           *sString;

   va_list arglist;

   // alloc an Error-String
   sString = ncalloc (200, sizeof (char));

   // macro to set arg-stack(format)
   va_start (arglist, format);
   // sprintf for arg-stack
   _vsnprintf (sString, 200, format, arglist);

   // print Error-String
   MessageBox (GetActiveWindow (), sString, "info", MB_OK | MB_SYSTEMMODAL | MB_ICONSTOP);

   // reset the arg-stack
   va_end (arglist);
   free (sString);

   // make an exception to end the routine ...
   nexit (1);
}

d3g 29. Jan 2004 21:11

Re: Variable Argumente in C
 
In GNU C ist die Funktion vasprintf() dabei, der man eine va_list übergeben kann. Den Format-String kannst du ja dann deinen Bedürftnissen anpassen. Die Funktion ist aber weder in C99 noch in POSIX definiert, also musst du sie vielleicht aus dem GNU-libc-Source kopieren (sofern du dein Programm unter einer GPL-kompatiblen Lizenz veröffentlichst).

Assarbad 29. Jan 2004 21:14

Re: Variable Argumente in C
 
Danke euch allen, aber besonders trifid und d3g ;)

Ich werd mal schauen ob es solche Funcs auch bei der RTL in NTOSKRNL.EXE gibt. Ist für einen NT Kerneltreiber und ich bin deshalb etwas eingeschränkt. Wenn Rückmeldung gewünscht wird, kommt auch diese ;)

Oliver

Assarbad 29. Jan 2004 21:43

Re: Variable Argumente in C
 
Funzt das nicht ganz.

Ich habe nur folgende Funktionen zur Verfügung (ist ein NT Kerneltreiber):

Code:
_snprintf
_snwprintf
sprintf
swprintf
_vsnprintf
vsprintf
vsprintf() würde es ja tun, aber Unicode wäre mir schon weit lieber :-/ ... Ideen? Ratschläge?

trifid 29. Jan 2004 22:02

Re: Variable Argumente in C
 
Du könntest den vsprintf als Grundlage für einen eigenen myvsprintf verwenden, der dir den Unicode verarbeitet.
Wenn Du den Source von vsprintf hast, dürfte es nicht schwer die Zeichenketten von 8Bit auf 16Bit anzuheben. (so habe ich meine void test ... entwickelt)

aber moment mal
die _vsnprintf unterstützt doch unicode

Assarbad 29. Jan 2004 22:18

Re: Variable Argumente in C
 
Ne ne ... Mißverständnis.

Es geht nicht darum daß nur der Output Unicode ist, sondern die komplette Verarbeitung. Das ist das Problem. Stell dir vor du hast russische, chinesische, japanische und arabische Zeichen in Dateinamen und alles auf einmal. Da kann man nicht mehr Codeseiten hin- und herschalten.

Es geht also darum daß ich irgendwie die komplette Verarbeitung in Unicode realisieren kann. Gibts vielleicht eine Möglichkeit mit Makros? Was hinten rauskommt muß bloß stimmen ... ist mir egal ob der vom Compiler erzeugte Code dann an allen Stellen anders aussieht. Hauptsache _ein_ einfacher Aufruf ermöglicht mir die formatierte Ausgabe von Unicode-Strings.

trifid 29. Jan 2004 22:23

Re: Variable Argumente in C
 
schau mal da nach
http://www.i18nguy.com/unicode/c-unicode.html
aber kannst Du nicht die Dateinamen auch mit einem Typ Casten

Robert Marquardt 30. Jan 2004 05:34

Re: Variable Argumente in C
 
C-Funktionen mit va_list Parameter koennen mit einer Glue-Funktion von Delphi aus elegant angesprochen werden.
Der Trick ist es die Funktion in Delphi mit einem "array of const" zu deklarieren und dann einen va_list Parameterblock zu erstellen.
Die JNI Konversion auf http://delphi-jedi.org/APILIBRARY enthaelt so einen Adapter.

Assarbad 30. Jan 2004 08:22

Re: Variable Argumente in C
 
@Robert:

Zitat:

Ich habe nur folgende Funktionen zur Verfügung (ist ein NT Kerneltreiber)
Um einen Kerneltreiber in Delphi zu schreiben müßte ich erstmal die entstehende EXE ändern (Checksumme, Subsystem) und sie müßte umbenannt werden (wobei dies nicht das eigentliche Problem ist) ... aber wenn du ein wenig mit der Materie vertraut bist, weißt du daß dies noch längst nicht ausreicht. Nebenher muß noch die komplette System und SysInit Unit ausgetauscht werden.

NicoDE 30. Jan 2004 09:20

Re: Variable Argumente in C
 
Zitat:

Zitat von Assarbad
Ich habe nur folgende Funktionen zur Verfügung (ist ein NT Kerneltreiber):

Code:
_snprintf
_snwprintf
sprintf
swprintf
_vsnprintf
vsprintf

RtlStringXxxVPrintfW ?

edit: vielleicth hilfreich, wenn es um sicheres String-Handling im Kernel-Space geht:
http://www.wd-3.com/archive/SafeStrings.htm
http://msdn.microsoft.com/en-us/kmar...other_9bqf.asp

Assarbad 30. Jan 2004 20:40

Re: Variable Argumente in C
 
Hi Nico,

oki hab die Func gefunden, aber leider gibts die scheinbar noch nicht in Win 2000. Watt nu?

http://www.osr.com/ddk/kmarch/safestrings_5msy.htm


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:22 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