AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Verfügbarkeit einer Routine für P/Invoke testen
Thema durchsuchen
Ansicht
Themen-Optionen

Verfügbarkeit einer Routine für P/Invoke testen

Ein Thema von Apollonius · begonnen am 26. Mai 2009 · letzter Beitrag vom 28. Mai 2009
 
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#1

Verfügbarkeit einer Routine für P/Invoke testen

  Alt 26. Mai 2009, 14:11
Hallo .NET-Gemeinde,
ich arbeite momentan an einem C#-Projekt, welches eine Art native Plugins - auf einzelnen Routinen basiert - unterstützen soll. Diese kann ich mit System.Reflection.Emit und P/Invoke aufrufen. Beim Import habe ich eine Liste von Bibliotheken und den Namen sowie die Signatur der zu importierenden Routine. Das Problem ist aber, dass ich nicht weiß, in welcher Bibliothek die Routine residiert. Daher möchte die Bibliotheken durchgehen und überprüfen, ob eine Routine mit dem bekannten Namen exportiert wird. Der Plugin-Mechanismus ist fest; die Information, in welcher Bibliothek die Routine sitzt, muss ich also selbst ermitteln. Dabei will ich unbedingt plattformunabhängig arbeiten, möchte also nicht LoadLibrary und GetProcAddress importieren.
Momentan ist meine Idee, mit System.Reflection.Emit eine entsprechende P/Invoke-Methode zu erstellen und dann Marshal.Prelink darauf aufzurufen; erhalte ich eine Exception, weiß ich, dass die Routine in der Bibliothek nicht vorhanden ist (andere Fehler schließe ich einfach mal aus). Offensichtlich ist diese Technik äußerst unelegant und ineffizient, da ich zum Testen ziemlich viele Methoden erstellen muss. Um eine hohe Speicherbelastung zu vermeiden, lagere ich den Test in eine AppDomain aus, die ich nach ca. 1000 Testimports mitsamt der dynamischen Assembly receyclen kann. Die Notwendigkeit einer zusätzlichen AppDomain macht das Ganze dann auch noch ziemlich langsam.
Meine Frage ist also, ob es eine nicht-native Möglichkeit gibt, zu ermitteln, ob eine Routine in einer nativen Bibliothek existiert - oder gleichbedeutend, ob ein P/Invoke auf die entsprechende Routine in der Bibliothek erfolgreich sein wird.
Vielen Dank im Voraus
Apollonius
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz