2010-03-01 21 views
14

Problemy:Czy istnieje darmowa implementacja printf dla .net?

Czy istnieje darmowa implementacja printf/sprintf dla platformy .net? Poza powyższym linkiem nie mogłem znaleźć niczego.

Dzięki!

Aktualizacja:

Dzięki za pomoc, nawet jeśli nie mógł znaleźć niczego. To znaczy, że będę musiał to zrobić sam (próbowałem tego uniknąć, ale no cóż ...)
Przygotowałem funkcję sprintf, która obsługuje podstawowe ciągi formatów, można ją znaleźć tutaj: https://sourceforge.net/projects/printfnet/. Spróbuję zrobić to kompletną implementacją, jeśli mogę.

+1

Nie wiem, dlaczego tak wiele się przebiło. Implementacja przy użyciu Regex może być wykonana w 30-50 liniach trywialnego kodu ... – leppie

+0

Jestem naprawdę ciekawy, dlaczego absolutnie POTRZEBUJESZ printf ... – swilliams

+0

Dlaczego nie możesz używać licencji CPOL? Nie widzę, jak to przeszkadza z wymogiem GPL. – leppie

Odpowiedz

2

Co z obsługą opakowanego C++? Jestem pewien, że możesz tam wywołać printf.

+0

Skierowałem także na Silverlight, więc nie mogę wywoływać funkcji natywnych. – Hali

4

Myślę, że chcesz to: http://www.codeproject.com/KB/printing/PrintfImplementationinCS.aspx

To darmowa implementacja portu C printf funkcji do C#. Powinieneś być świadomy, że autor zwraca uwagę, że nie wszystkie funkcje printf są obecnie obsługiwane - ale może to być dobry punkt wyjścia.

EDYCJA: Widzę, że licencja na tę wersję nie jest zgodna z tym, czego potrzebujesz - w tym przypadku zdecydowanie polecam spojrzenie na wywołanie wersji niezarządzanej bezpośrednio, jak omawia poniższy artykuł na blogu. To prawdopodobnie najbardziej kompatybilna i najbezpieczniejsza rzecz do zrobienia.

Jeśli to nie go wyciąć, oto blog artykuł o faktycznie wywołanie niezarządzanego printf funkcję:

http://community.bartdesmet.net/blogs/bart/archive/2006/09/28/4473.aspx

Wygląda to jest wszystko, co trzeba nazwać niezarządzanej printf z C#:

[DllImport("msvcrt40.dll")] 
public static extern int printf(string format, __arglist); 

static void Main(string[] args) 
{ 
    printf("Hello %s!\n", __arglist("Bart")); 
} 
+0

Pamiętaj, że wpisanie __argumentu do VS2008/2010 może spowodować awarię IDE. MS nie naprawię aż do następnej głównej wersji ... – leppie

+0

Dzięki, ale ja też celuję w Silverlight, więc nie mogę wywoływać natywnych funkcji. – Hali

4

Dlaczego nie można znaleźć zgodnej z GPL implementacji printf w C i przenieść go do .NET?

+0

Jeśli LGPL jest wystarczająco dobry, kod źródłowy glibc jest tutaj: http://ftp.gnu.org/gnu/glibc/ - stdio-common zawiera printf.c, który wywołuje funkcję vprintf w vfprintf.c. Całkiem owłosiony kod ... –

+0

Absolutnie, żeby nie wykluczyć tego pomysłu w sumie, ale kilka implementacji, które widziałem w przeszłości, było więcej niż nieodpowiednie do przeniesienia do C# - dobrze przynajmniej jeśli interesujesz się kodem; -) Równie dobrze może być łatwiej znaleźć istniejący zestaw testów i jakoś programować przeciwko nim od zera. –

Powiązane problemy