Δυστυχώς, πέτυχες το αντίθετο. *Τώρα* όποιος χρήστης βγάλει την εφαρμογή θα έχουν πρόβλημα όλοι οι χρήστες. Εκτός και αν εγκαθιστάς την εφαρμογή στο Documents ή κάποιο άλλο folder το οποίο είναι ακατάλληλο για εγκατάσταση προγραμμάτων.
Τα Windows υποστηρίζουν per-machine ή per-user εγκατάσταση εξαπανέκαθεν. Μόνο ένας administrator μπορεί να βάλει ή βγάλει μία εφαρμογή για *όλους* τους χρήστες. Αυτό κάνει η επιλογή που βλέπεις στους διάφορους installers για εγκατάσταση σε όλους τους χρήστες.
Aπό τα Windows 7 και μετά μάλιστα, οι εφαρμογές που εγκαθιστούν οι χρήστες ως Per-User πάνε στο προσωπικό folder του κάθε χρήστη μέσα στο %LocalAppData%\Programs.
Τα COM registrations έχουν reference count και δεν βγαίνουν αν δεν απεγκατασταθεί και η *τελευταία* εφαρμογή που τα χρησιμοποιεί. Αυτό έγινε ακριβώς για να αποφευχθεί το πρόβλημα να *απεγκατασταθεί ή διαγραφεί το DLL* και έτσι να σκάσουν όλες οι άλλες εφαρμογές και χρήστες. Επιπλέον, με το COM δεν υπάρχει ασάφεια για το τι ακριβώς τύπους θέλει η κάθε μέθοδος. Η Delphi μπορεί να δημιουργήσει τους αντίστοιχους τύπους απλά κοιτάζοντας το tlb. Αντίθετα, με χύμα functions θα πρέπει να φτιάξεις με το χέρι τύπους που θα ταιριάζουν ακριβώς σε αυτά που περιμένει η βιβλιοθήκη. Αν το παραμικρό πάει στραβά, θα φας κατευθείαν Access Violation χωρίς εξήγηση.
Όσο για το blog, αυτά θα τα έβρισκες και στο documentation του P/Invoke. Πχ. το πρώτο αποτέλεσμα ψάχνοντας για "C# P/Invoke" είναι το "Platform Invoke Tutorial" στο https://msdn.microsoft.com/en-us/library/aa288468(v=vs.71).aspx . Υπέθεσα ότι για να ρωτάς πως να καλέσεις .NET από Delphi το είχες ήδη κοιτάξει.
Όπως και να έχει, η χρήση COM είναι ευκολότερη και ασφαλέστερη, ακριβώς επειδή δεν υπάρχει ασάφεια στις κλήσεις και επειδή είναι δυσκολότερο να χαθούν DLL επειδή σβήστηκαν κατά τύχη.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos