wie kann eine dll mehr speicher anfordern?
-
hallo zusammen,
ich schreibe grade eine java-twain bridge und benutze, da sich twain nur mittels eines gültigen HWND's initieren läßt, eine vc++ dll um die befehle von java an twain umzusetzten. diese dll erzeugt zum zeitpunkt der initierung von twain ein verstecktes window dessen HWND an twain übergeben wird. dieses HWND dient twain als parent für alle fenster die twain aufpopen läßt.
mein problem ist, daß wenn ich nach der initierung und dem auswählen des scanners in twain mir das fenster des scanners anzeigen lasse (fenster mit vielen vielen einstellungsmöglichkeiten drauf), ich nach dem schließen des fensters von twain die nachricht erhalte, es sei zu wenig speicher da.
eine java-anwendung hat ja normalerweise bis zu 64MB zur verfügung und dank einem parameter, das ich zum start der virtuellen maschine übergegeben habe, hat meine java-anwendung sogar 256MB. mein rechner hat 640MB ram insgesammt wovon zur laufzeit dann noch 400 MB frei wären. die applikation (der testtreiber, bei dem das problem auftritt [tritt aber auch bei anderen apps auf]) benutzt aber nur 13 MB. ich hab keinen blassen schimmer, wie ich dieses problem in den griff kriegen soll, da ja meine java applikation höchst**wahrscheinlich gar nichts davon mitbekommt, daß twain in einer native routine aufgerufen wurde und jetzt speicher belegt.
wie könnte ich twain mehr speicher zugestehen. alles was twain zur initialisierung von mir bekommt, nachdem ich die Twain_32.dll geladen habe, ist dieses HWND, was ja eigentlich auch auf einen speicherbereich verweist, nämlich irgenwo rein, in den von meiner applikation. gibt es eine möglichkeit dieses HWND größer zu machen (ich denk mal, die idee an sich is schon hirnrissig) bzw. wenigstens rauszufinden, warum twain zu wenig speicher zur verfügung steht?
hat irgend jemand irgendwelche vorschläge wie ich dem problem herr werde oder wenigstens, wie ich das problem etwas eingrenzen kann?
vielen dank
wayne**
-
Meinst du mit Speicher den stack? Das kann man bei den Compilern einstellen, wie groß der ist.
Der Heap ist normalerweise nur durch deinen RAM Speicher begrenzt. Wenn du new/delete benutzt, benutzt du den Heap. Alle lokalen Variablen liegen auf dem Stack.Was für eine Meldung erscheint denn genau?
-
es ist so, daß man, wenn man aufrufe an die TWAIN_32.dll absetzt einen integer zurückbekommt, der anzeigt, ob man den status (einen weiteren integer) mal abfragen sollte oder ob der funktionsaufruf geglückt ist. in meinem fall ist er recht häufig nicht geglückt worauf ich mal den status abgefragt habe. der war dann ein wert, der der meldung entspricht, daß zu wenig speicher vorhanden sei.
dank deiner antwort bin ich auf die idee gekommen mal an den compilereinstellungen mal rum zu basteln und siehe da ... es lag am heap. standard ist ja 1 MB heap und das war twain wohl zu wenig. ich hab's jetz mal auf 5 MB gestellt und schon läuft die sache. darauf hätte ich eigentlich auch früher kommen können, aber ich hab halt nicht so viel erfahrung was vc++ angeht. schade ist nur, daß davon nie von twain-seite her ein wort gefallen ist. weder in der twain spezifikation noch in der mailing list von twain. scheint so, als wär ich der einzige, der die standardeinstellungen von vc++ benutzt.
vielen vielen dank für das erwähnen der richtigen schlagwörter
wayne
-
standard ist ja 1 MB heap und das war twain wohl zu wenig. ich hab's jetz mal auf 5 MB gestellt und schon läuft die sache.
Du meinst den Stack, oder? Der Heap ist ziemlich sicher nur durch deinen RAM begrenzt. Ich habe beim vc++ auch noch nie einen wert für die heapgröße gesehen.