| |
|
|
Jac de Lad | Hallo Community!
Mit der API CreateFile kann man jede Menge verschiedener Dateien erstellen. Ich suche eine Möglichkeit eine Datei quasi im RAM zu erstellen um dann mittels einer DLL-Funktion darauf zuzugreifen, etwas damit zu machen und die Datei anschließend wieder zu löschen. Damit würde ich eine temporäre Datei umgeben, was erstens schneller ist und zweitens einfach schöner. Kennt sich jemand damit aus? Ich komme mit der Hilfe nicht klar, es gibt das etliche Parameter mit hunderten Möglichkeiten...
Jac |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 18.04.2008 ▲ |
|
|
|
|
| Ja, das ist in etwa das was die pipe-unit macht.
//create
h&=external(kernel32,CreateFileMappingA,$FFFFFFFF,0,4,0,32767,addr(nam$))
a&=external(kernel32,MapViewOfFile,h&,2,0,0,32767)
//close
external(kernel32,UnmapViewOfFile,a&)
external(kernel32,CloseHandle,h&)
|
|
|
| |
|
|
|
Jac de Lad | Aber wie kann ich die Datei nutzen, wenn die Funktion der DLL einen Zeiger auf einen Dateinamen benötigt?
Jac |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 18.04.2008 ▲ |
|
|
|
|
| string a&,0=Blub |
|
|
| |
|
|
|
Jac de Lad | Ich hab mir im MSDN die APIs angesehen, aber ich komme damit nicht klar. Hast du eventuell ein Minimalbeispiel?
Jac |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 19.04.2008 ▲ |
|
|
|
|
| Im Moment nicht - die pipeUnit raspelt vieles hin-und-her sodass diese kaum zeigt wie es einfach geht... |
|
|
| |
|
|
|
Jac de Lad | Das ist schlecht. Trotzdem danke, ich schau mich mal weiter um. |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 19.04.2008 ▲ |
|
|
|
|
Frank Abbing |
Ich suche eine Möglichkeit eine Datei quasi im RAM zu erstellen um dann mittels einer DLL-Funktion darauf zuzugreifen, etwas damit zu machen und die Datei anschließend wieder zu löschen.
Hört sich für mich an wie ein stinknormaler Speicherbereich. Übergib einfach einen Zeiger auf den Speicher an die Dll-Funktion, z.B. NeueFunktion(bereich#) |
|
|
| |
|
|
|
| Stimmt, er brauchs ja garnicht prozessübergreifend, sei denn die DLL läuft in einem anderen Prozess... |
|
|
| |
|
|
|
Andreas Miethe
| Frank Abbing
Frank AbbingIch suche eine Möglichkeit eine Datei quasi im RAM zu erstellen um dann mittels einer DLL-Funktion darauf zuzugreifen, etwas damit zu machen und die Datei anschließend wieder zu löschen. Hört sich für mich an wie ein stinknormaler Speicherbereich. Übergib einfach einen Zeiger auf den Speicher an die Dll-Funktion, z.B. NeueFunktion(bereich#)
Wird nicht funktionieren ! So wie ich das verstanden habe, soll eine Datei, die nur im Ram liegt, mit einem Dateinamen angesprochen werden.
Beispiel:
Eine EXE wird mittels Datengenerator in die Exe eingebunden. Da habe ich meine EXE im Speicherbereich. Jetzt versuch mal mit der Kernel32.Dll per CreateProcess() das Ding zum Laufen zu kriegen. Da wird kein Speicherbereich sondern ein Dateiname erwartet. Immer wenn eine Dll-Funktion einen Zeiger auf einen Dateinamen erwartet, und davon gibt es eine Menge, wird das so nicht funktionieren.
Bitte berichtige mich wenn ich da falsch liege ! |
|
|
| Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...] | 20.04.2008 ▲ |
|
|
|
|
Frank Abbing |
Bitte berichtige mich wenn ich da falsch liege !
Du liegst da sicher nicht falsch. Die Sache mit dem Dateinamen habe ich bewußt aussen vor gehalten, weil ich davon ausgegangen war, dass Jac die Dll selber erzeugt. Dafür fand ich die Technik über die Bereiche viel sinnvoller. Das geht aber mit einer fremden Dll nicht.
Aber ich bin sicher, dass auch eine Exedatei aus dem Speicher gestartet werden kann. Immerhin geht das ja auch mit Dlls (Memorymodule) und diese sind ja auch Exedateien. Wie auch immer, alles in Allem ist iFs Lösung vorzuziehen. Ich bin sicher, er liefert Jac noch einen kurzen Democode dazu. |
|
|
| |
|
|
|
Andreas Miethe
| Hallo Frank,
ist eine ganz andere Geschichte, wenn die Dll selbst geschrieben wird. Davon gehe ich aber nicht aus.
Jac
Aber wie kann ich die Datei nutzen, wenn die Funktion der DLL einen Zeiger auf einen Dateinamen benötigt? Jac |
|
|
| Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...] | 20.04.2008 ▲ |
|
|
|