| |
|
|
| Wer en su Anwendung con sicherheitstechnisch sensiblen Daten hantiert, debería muy genau en Nutzung el Profanfunktion @Externo nachdenken.
|
|
|
| |
|
|
|
| Como Externo intern dasselbe es como todos DLL Aufrufe, willst Usted uns sagen, no DLL a nutzen? |
|
|
| |
|
|
|
| Nö.
Lo va me en el Herausfinden el anzuspringenden Adresse während el Laufzeit des Quelltextes. Das Einklinken encima el Exporttable el jeweiligen DLL scheint como besonders simplemente a ser...
... porque Yo muß como nichts en el Festplatte ändern y kann direkt en el Speicher aggieren...
...el Parámetro el Función abgreifen y otra vez a Función enviar...
...sin en irgendeiner Weise Idea de MSAM y Diassembling haben tener...
...qué natürlich auch para el Verwendung de APIs de Headern heraus gelten sería. |
|
|
| |
|
|
|
RGH | XProfan sabe drei Wege, en Características en externenDLLs (y somit auch el WindowsAPI) aufzurufen:
CALL: Der Aufruf folgt en direkte Adresse., Dazu muß also en el XProfan-Programa el DLL geladen y el FunktionsAdresse ermittelt voluntad. Dieser Weg es umständlich (= langsam) y benötigt mehrere Zeilen en el XProfan-Programa. Macht eigentlich sólo Sinn, si uno, etwa en COM-Interfaces, sólo el Adressen disponible ha.
EXTERNAL: Der bevorzugte Weg, como auch para Headerfiles geeignet: Un Línea en el Programa. El DLL muß no en cada Fall vorher geladen voluntad. (Hängt de el Función de.) Das Laden el DLL y el Ermitteln el Funktionsadresse voluntad en el Interpreter o. el Runtime (Delphi-Programa) hecho.
DEF: el historische Weg: Das qué en Externo direkt en el Aufruf es, es en el DEF-Línea: DLL-Name y Funktionsname. Im Interpreter algo langsamer como EXTERNAL, en el fertigen Programa natürlich no, como el Compiler el Adresse el DEF-Línea einträgt y el DEF no mehr gesucht voluntad muß.
EXTERNAL y DEF son technisch weitgehend identisch y lo voluntad en el Interpreter/en el Runtime el gleichen Routinen aufgerufen, a Funktionsadresse a ermitteln. Der eigentliche Aufruf el externo Función con Übermittlung el Parámetro es en allen drei Varianten dieselbe Rutina en Interpreter y Runtime.
Yo glaube kaum, daß el Aufruf externer Características de DLL/APIs en XProfan o más weniger sicherheitsrelevant es, como en all el otro Programmen el derartige Aufrufe beinhalten ... y el son eigentlich todos Windowsprogramme.
BTW: Was se Laufzeit des Quelltextes bedeuten? Beim fertigen Programa se ejecuta kein Ver código fuente, pero el Compilat.
Saludo Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 09.10.2006 ▲ |
|
|
|
|
| Wenn I, con DEF el externe Función al Anfang meines Programmes deklariere, wann se entonces el dagehörige Sprungadresse ermittelt? Beim nächsten Aufrufen el Función en el Programa oder en Deklaration?
Wird esta Sprungadresse irgendwann ermittelt, während mein Prozess se ejecuta, kann Yo en el geladenen Programa el Exporttables el DLL ändern y así el aufgerufenen Características abgreifen. Wird el Adresse beim Laden des Programmes al Anfang meines Quelltextes ermittelt, va el no así simplemente.
Es en keiner Weise gegen Profano, son Gedanken para Programmieren schlechthin... |
|
|
| |
|
|
|
RGH | Apéndice:
Einen Diferencia en DLL-Aufrufen hay (allerdings no en un XProfan-Programa):
DLL puede statisch y dynamisch gelinkt voluntad:
statisch: Hier voluntad igual beim Programmstart el DLL geladen y el Funktionsadressen gelesen, así dass en späteren Aufrufen, esta ya disponible posición. Vorteil: Ist algo más rápido y el meisten Programmiersprachen (z.B. Delphi) einfacher a programa. Nachteil: Wenn el DLL y/oder Características no disponible son, startet el Programa no y Windows meldet, daß una para Ausführen des Programmes notwendige DLL fehlt. Como el OpenGL-DLL en allen de XProfan unterstützten Systemen (de Windows 95/NT 3.51) disponible son, estos en XProfan statisch gelinkt.
dynamisch: Hier voluntad el DLL sólo geladen y el Funktionsadressen ermittelt, si ellos en el Programa aufgerufen voluntad. Vorteil: Wenn cierto Funktionalitäten vom Anwender no benötigt voluntad, braucht él auch no el DLL en seinem Rechner haben. Un Fehlermeldung kommt sólo, si la entsprechende Funktionalität aufgerufen se. Nachteil: Es una bastante klein wenig langsamer y z.B. en Delphi algo aufwändiger a implementieren. El ODBC-DLL para el SQL-Schnittstelle Yo en XProfan dynamisch gelinkt. XProfan startet also auch en Systemen sin installierte ODBC-Treiber (z.B. Win95/98 sin MS-Office) völlig problemlos, producido aber una Fehlermeldung, si uno en solchen Systemen una SQLInit intenta.
Im XProfan-Programa voluntad para todos con DEF, EXTERNAL oder CALL erzeugten DLL-Aufrufen el notwendigen DLL dynamisch gelinkt. (Das wäre beim Interpreter auch nada anders posible, como dieser sí no wissen kann, qué para Schweinereien el geschätzte Programmierer alles con ihm programa voluntad.)
Saludo Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 09.10.2006 ▲ |
|
|
|
|
RGH | [quote:b7f9a07702=Andreas Hötker]Wenn I, con DEF el externe Función al Anfang meines Programmes deklariere, wann se entonces el dagehörige Sprungadresse ermittelt? Beim nächsten Aufrufen el Función en el Programa oder en Deklaration?[/quote:b7f9a07702] Erst beim Aufruf el Función en el Programa. Von por lo tanto hay no hay diferencia zwischen DEF y EXTERNAL.
Saludo Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 09.10.2006 ▲ |
|
|
|
|
| [quote:b7ae512a2a=RGH] CALL: Der Aufruf folgt en direkte Adresse., Dazu muß also en el XProfan-Programa el DLL geladen y el FunktionsAdresse ermittelt voluntad. Dieser Weg es umständlich (= langsam) y benötigt mehrere Zeilen en el XProfan-Programa. Macht eigentlich sólo Sinn, si uno, etwa en COM-Interfaces, sólo el Adressen disponible ha.[/quote:b7ae512a2a] Beim Aufruf con Funktionsnamen muß intern auch sólo el Funktionsadresse ermittelt voluntad, así el lo con Call IMHO no länger dauern kann, pero genauso rápidamente ser debería y de el 2ten Funktionsaufruf una Geschwindigkeitszuwachs bedeutet.
Como lo en el Tat umständlicher es, lohnt el Verwendung aber meist no |
|
|
| |
|
|
|
RGH | [quote:8841b3a260=TS-Soft]Beim Aufruf con Funktionsnamen muß intern auch sólo el Funktionsadresse ermittelt voluntad, así el lo con Call IMHO no länger dauern kann, pero genauso rápidamente ser debería y de el 2ten Funktionsaufruf una Geschwindigkeitszuwachs bedeutet.[/quote:8841b3a260] Como XProfan auch compiliert desafortunadamente siempre no tan rápidamente como TurboDelphi es ;) , es ya una kleiner Vorteil, si Delphi el DLL lädt y el Funktionsadresse ermittelt y no XProfan. En mehrfachem Aufruf derselben Función puede natürlich kompensiert y ser entonces una pequeña Tempo-Vorteil bedeuten.
Saludo Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 09.10.2006 ▲ |
|
|
|
|
| Vorneweg: Erst veces vielen Dank.
Yo habs con TNT grad veces incluso ausprobiert y el API MessageBeep de el User32 en el Función MessageBoxA umgeleitet. En DEF y Externo se entonces wirklick MessageBoxA en lugar de MessageBeep ausgeführt. El sicherere Método wäre entonces wirklich el encima Call y GetProcAddress (wobei GetProcAddress en Programmstart aufgerufen voluntad müßte).
Was mich gefreut ha,: El Profanfunktion Beep erzeugte más una Beep, en lugar de uno Messagebox - Yo denke veces, el es pero no en allen Características así - oder?? |
|
|
| |
|
|
|
| Juhu entonces mach ego con XPSE sí correcto el Hice Headerfiles genutzte Apis en Calls umwandle... |
|
|
| |
|
|
|
| Sí, deshalb mi Cuestión hier. |
|
|
| |
|
|