| |
|
|
- Página 1 - |
|
Jac de Lad | ¡Hola Comunidad!
Mit el API CreateFile puede ser jede Menge verschiedener Archivos redactar. Yo búsqueda una Möglichkeit una Expediente quasi en el RAM a redactar en entonces mittels uno DLL-Función darauf zuzugreifen, algo así a hacer y el Expediente anschließend otra vez a löschen. Damit sería Yo una temporäre Expediente umgeben, qué erstens más rápido es y zweitens simplemente schöner. Kennt se alguien así de? Yo komme con el Ayuda no está claro, lo son el etliche Parámetro con 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 ▲ |
|
|
|
|
| |
|
- Página 1 - |
|
| cadena a&,0=Blub |
|
|
| |
|
|
|
Jac de Lad | Yo me en el MSDN el APIs angesehen, pero yo komme así no está claro. Hast du eventuell una 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 no - el pipeUnit raspelt vieles hin-y-her sodass esta kaum zeigt como simplemente va... |
|
|
| |
|
|
|
Jac de Lad | Es schlecht. Trotzdem danke, Yo mostrar mich veces más en. |
|
|
| 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 |
Yo búsqueda una Möglichkeit una Expediente quasi en el RAM a redactar en entonces mittels uno DLL-Función darauf zuzugreifen, algo así a hacer y el Expediente anschließend otra vez a löschen.
Hört se para mich a como una stinknormaler Speicherbereich. Übergib simplemente una Zeiger en el Speicher a el Dll-Función, z.B. NeueFunktion(bereich#) |
|
|
| |
|
|
|
| Stimmt, él brauchs sí garnicht prozessübergreifend, sei porque el DLL se ejecuta en un otro Prozess... |
|
|
| |
|
|
|
Andreas Miethe
| Frank Abbing
Frank AbbingYo búsqueda una Möglichkeit una Expediente quasi en el RAM a redactar en entonces mittels uno DLL-Función darauf zuzugreifen, algo así a hacer y el Expediente anschließend otra vez a löschen. Hört se para mich a como una stinknormaler Speicherbereich. Übergib simplemente una Zeiger en el Speicher a el Dll-Función, z.B. NeueFunktion(bereich#)
Wird no trabajo ! So como yo verstanden habe, se una Expediente, el sólo en el Ram liegt, con un Dateinamen angesprochen voluntad.
Ejemplo:
Un EXE se mittels Datengenerator en el Exe eingebunden. Como Yo mi EXE en el Speicherbereich. Jetzt versuch veces con el Kernel32.Dll por CreateProcess() lo para Laufen a kriegen. Como se kein Speicherbereich pero una Dateiname esperado. Immer si una Dll-Función una Zeiger en una Dateinamen esperado, y su hay una Menge, se el así no trabajo.
Bitte berichtige mich si yo como falso 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 si yo como falso liege !
Usted liegst como sicher no falso. El Sache con el Dateinamen Yo bewußt aussen antes mantenido, porque Yo su ausgegangen war, dass Jac el Dll selber producido. Dafür fand Yo el Technik en Bereiche viel sinnvoller. Es aber con uno fremden Dll no.
Aber Yo bin sicher, dass auch una Exedatei de el Speicher comenzó voluntad kann. Immerhin va el en efecto con Dlls (Memorymodule) y esta son tan auch Exedateien. Como De todos modos, alles en Allem es iFs Solución vorzuziehen. Yo bin sicher, él liefert Jac todavía una kurzen Democode dazu. |
|
|
| |
|
|
|
Andreas Miethe
| ¡Hola Franco,
es una bastante otro Geschichte, si la Dll incluso geschrieben se. Davon gehe Yo pero no de.
Jac
Aber como kann Yo el Expediente nutzen, si la Función el DLL una Zeiger en una 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 ▲ |
|
|
|
| |
|
- Página 2 - |
|
|
Jac de Lad | Nein, nein, nein.
Folgendes:
Un DLL xyz benötigt para una Operation una Dateinamen (meinetwegen se el Expediente geladen y bajo una otro Formato otra vez gespeichert). Yo erzeuge el Expediente aber sólo temporär, porque Profano el Expediente x sólo en un otro Formato erzeugen kann. Yo voluntad nun esta temporäre Expediente umgehen, porque lo me a langsam es, dass el en el Festplatte erstellt se. Deswegen búsqueda Yo después de uno Möglichkeit, dass el Expediente trotzdem erstellt se, aber el Edición en el RAM umgeleitet se. El Expediente muss natürlich trotzdem bajo una Dateinamen ansprechbar ser, como sonst el DLL xyz no mehr va.
Wisst ihr ahora Yo mi? 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 | 20.04.2008 ▲ |
|
|
|
|
Sebastian König | Jac
Nein, nein, nein. Folgendes: Un DLL xyz benötigt para una Operation una Dateinamen (meinetwegen se el Expediente geladen y bajo una otro Formato otra vez gespeichert). Yo erzeuge el Expediente aber sólo temporär, porque Profano el Expediente x sólo en un otro Formato erzeugen kann. Yo voluntad nun esta temporäre Expediente umgehen, porque lo me a langsam es, dass el en el Festplatte erstellt se. Deswegen búsqueda Yo después de uno Möglichkeit, dass el Expediente trotzdem erstellt se, aber el Edición en el RAM umgeleitet se. El Expediente muss natürlich trotzdem bajo una Dateinamen ansprechbar ser, como sonst el DLL xyz no mehr va. Wisst ihr ahora Yo mi? Jac
Un Möglichkeit, el me gerade einfällt, wäre tal vez CreateNamedPipe(). Solche Objetos bekommen una Namen después de el Schema \.pipepipename y dejar se con CreateFile() abierto, sodass uno ellos höchstwahrscheinlich a el Función como via ihres Expediente-Namens transferencia podría. Das schwierige a el Sache es allerdings, dass uno se en el aufrufenden Prozess en el Beschreiben el Pipe kümmern muss - muy schwierig, porque todos debería parallel a el Funktionaufruf geschehen, also en un eigenen Hilo ablaufen (qué con Profano2Cpp wohl trabajo sería). Leider Yo en el Moment extremo wenig Tiempo, sodass Yo kein Ejemplo liefern kann, pero yo voluntad en el nächsten Tagen veces algo ausprobieren...
Tal vez ha aber alguien ni bessere, i.e. einfachere Concepto...
MfG
Sebastian |
|
|
| |
|
|
|
Sebastian König | So, hier es ahora veces una Ejemplo. Im Principio funktioniert lo - jedenfalls en me. El Procedimiento TestProc es una Dummy para el DLL-Función: Sie öffnet el Expediente encima ihren Namen y liest el Inhalt, a nichts mehr para Lesen verfügbar es. Leider liegt hier (höchstwahrscheinlich) auch el große Einschränkung des Konzepts: Das todo funktioniert wohl sólo, si el Lesen en esta Art y Weise stattfindet y no irgendwie primero el Dateigröße ermittelt y luego alles en una gelesen se. Einen Intento es aber tal vez trotzdem Valor... KompilierenMarcaSeparación $H Windows.ph
$IFNDEF P2CPP
Cls
Print Der Code funktioniert leider nur mit Profan2Cpp - Sorry!
Print
Print Taste zum Beenden.
WaitKey
End
$ENDIF
var pipe$ = \\.\pipe\sk-testpipe
var signal& = ~CreateEvent(0,0,0,0)
declare data#
dim data#,1024 * 100 100 KB
clear data#
Bereich füllen...
declare error&
proc WriteThreadProc
parameters lpParams&
P2CPP: <USE_EXTERNAL_ST>
var pipe& = ~CreateNamedPipe(Addr(pipe$),~PIPE_ACCESS_OUTBOUND,~PIPE_TYPE_BYTE | ~PIPE_WAIT,1,1024,1024,500,0)
if pipe& = ~INVALID_HANDLE_VALUE
error& = ~GetLastError()
~SetEvent(signal&)
~ExitThread(1)
endif
~SetEvent(signal&)
~ConnectNamedPipe(pipe&,0)
var dwTotalAvail& = SizeOf(data#)
var dwTotalWritten& = 0
var dwWritten& = 0
while dwTotalWritten& < dwTotalAvail&
dwWritten& = 0
~WriteFile(pipe&,data# + dwTotalWritten&,1024,Addr(dwWritten&),0)
dwTotalWritten& = dwTotalWritten& + dwWritten&
~Sleep(0)
endwhile
~FlushFileBuffers(pipe&)
~DisconnectNamedPipe(pipe&)
~CloseHandle(pipe&)
~ExitThread(0)
P2CPP: </USE_EXTERNAL_ST>
endproc
proc TestProc
parameters filename$
declare file&
var file& = ~CreateFile(Addr(filename$),~GENERIC_READ,0,0,~OPEN_EXISTING,0,0)
Color 12,15
Print Datei-Handle:,file&
if file& = ~INVALID_HANDLE_VALUE
Print WinError$(error&)
WaitKey
End
endif
var dwTotalRead& = 0
var dwRead& = 0
declare buffer#
dim buffer#,1024
while ~ReadFile(file&,buffer#,1024,Addr(dwRead&),0)
dwTotalRead& = dwTotalRead& + dwRead&
dwRead& = 0
endwhile
~CloseHandle(file&)
Print Int(dwTotalRead& 1024),KB gelesen
Print
dispose buffer#
endproc
Cls
declare id&
var thread& = ~CreateThread(0,0,ProcAddr(WriteThreadProc,1),0,0,Addr(id&))
Print Thread-ID:,id&
Print Thread-Handle:,thread&
Print
~WaitForSingleObject(signal&,~INFINITE)
~CloseHandle(signal&)
TestProc pipe$
~CloseHandle(thread&)
dispose data#
Color 0,15
Print Taste zum Beenden.
WaitKey
End
HTH
Sebastian |
|
|
| |
|
|