Windows Mobile Development: RAM Problem - Windows Mobile Software Development

Hey!
First of all: I know that there are many solutions to exactly this problem, but none of them works...
I am currenty working on an Windows Mobile 6.1 professional Application with Visual Studio 2005 Standard Edition in c#. My mobile is a Samsung Omnia i900. Additionally i use the Windows Mobile SDK 6 professional.
My Problem: the app seems to get not enough memory for executation. If i load a large image (2mb) i get an "OutOfMemory"-Exception. Weird: if i run the app via Visual Studio (Deploy on Device) i cant load even pretty small images. When i start the app on the device, i can load bigger images, but i need to load images of 2 mb and that doesnt work either way! This application will get pretty large so i was wondering how this can work, when i only got 1-2 mb ram, even though the mobile tells me that there more than 50 mf ram free to use.
i know that you can free ram of older images, when i dont need em anymore with dispose() but i even fail to load one image, if its big enough.
i also tried the OpenNetCF, didnt work either!
this really drives me crazy as im looking for solutions for the last few days, nothing works! i mean, how can i create a biger app, if i only have 2 mb or Ram to run it in??
please please help!
Michael
P.S.: as i am pretty new to visual studio, i have another tiny question: i added some references (DLLs) to the project, that i do not need anymore! how can i remove those references? cannot find the command *too stupid*

Do you know if you're using DirectDraw in those .NET wrappers?
Windows Mobile powered devices have a graphical memory limit, which no one can do anything about :S
If you use GDI (slower, not hardware accelerated imaging API) I think you'll have less problems.
I work with native code, so I'm not sure you can make those choices using .NET, nor if this is your actual problem.

hey and thanks for responding!
well, as you say im not sure if i am using it! i use the normal System.Drawing Stuff. When i load a picuter i use Image i = new Bitmap(path) or paint with graphics.drawImage, either way the memory overflows! this is driving me crazy

Can you try developing this using native code?

well isnt that extremely complicated? i am quite new to that stuff, so i am horrorfied to even think about writing this in native code!
well i could give it a try, do you know some good tutorials for that? i can code a little java, delphi, haskell, prolog and C#, but all of these are pretty far away from machine language ,so native coding would be pretty hard for me!

Ahah it seems you're under the impression native code = Binary?
Native code, as opposed to Managed Code (C#, VB) is simply running C or C++, without the .NET sandbox around.
Maybe it's too much for now. I can't help with C# or VB, but I advise you to search for GDI and DirectDraw calls on Managed Code and see what you're using.

hehe, i was already wondering, what kind of dude you are, coding in machine language (that was my translation given by google). Ok, i think i can do some stuff in c++. Do i have to tell my visual studio explicitly not to use the .NET-framework when i start a C++ Mobile Device Project or is that the default configuration? sorry im really new to that, used to code in eclipse...
mhmpf! i like that wysiwyg stuff from c#, damn...
but thanks so far!
anybody else got any ideas? i mean it has to be possible... if not, ill try some c++

I suggest you just head over to MSDN.com and check what exactly those functions do. There's no point in learning "Windows driven" C++ if the problem rests in other place.
I'm almost sure there are GDI calls for .NET. I merely wanted you to try them!

hey, i am afraid i am already using the GDI-calls! Found several tutorials, which show how to load an image, exactly like i did it.

That's not good.
I must ask, why do you want 2mb images?

its a navigation-like software, and i need to load the complete image to be able to scroll smoothly through it! for the moment it works as i changed the image into a 600kb one... but im afraid, as the application gets bigger even those 600kb could be too much.when i implemented the other logics like routing and points of interest on the map, i think that will exceed those (apparently only) 2mb ram-space i have...

Sepplo said:
its a navigation-like software, and i need to load the complete image to be able to scroll smoothly through it! for the moment it works as i changed the image into a 600kb one... but im afraid, as the application gets bigger even those 600kb could be too much.when i implemented the other logics like routing and points of interest on the map, i think that will exceed those (apparently only) 2mb ram-space i have...
Click to expand...
Click to collapse
I think it's best to buffer the current position's image and the neighboring ones. When the position changes you automatically show the pre-buffered neighbor, free the previous ones and load the next. If there's a sudden change by a lot, you'll just say "loading" and buffer the new far away position with its neighbors.
Don't try to have the complete "maps" always fully available.

but when the application gets bigger (other things too come), im almost sure i will need more than 1,5mb ram, besides: if i just load parts of the picture, i need to make more changes on the MouseMove-Event, Scrolling will get laggy with that :/
(by the way, thanks a lot for helping me, i appreciate it very much!!)

No, it can be done, buffering is essential in graphical intensive applications on Windows Mobile... You have to keep in memory what you are displaying and the next probable ones
No problem, it's what we're here for

Try writing the code that loads the images in a seperate assembly (dll) and call that from the main exe.
Ta
Dave

Sepplo said:
My Problem: the app seems to get not enough memory for executation. If i load a large image (2mb) i get an "OutOfMemory"-Exception.
Click to expand...
Click to collapse
What kind of image is it? Remember that many image formats are compressed, so doing stuff with em takes more memory than you'd realize.

godefroi said:
What kind of image is it? Remember that many image formats are compressed, so doing stuff with em takes more memory than you'd realize.
Click to expand...
Click to collapse
How big is the image as a Bitmap (ie a .bmp) - this will tell you how much RAM it requires to load (plus overheads for the object)
Its probably best if you take the Google\Bing maps approach and split it into a number of smaller images and load\unload each one as you need it

TehPenguin said:
How big is the image as a Bitmap (ie a .bmp) - this will tell you how much RAM it requires to load (plus overheads for the object)
Its probably best if you take the Google\Bing maps approach and split it into a number of smaller images and load\unload each one as you need it
Click to expand...
Click to collapse
That's what I suggested, but he seems reluctant in buffering only the active and neighboring parts... I don't see any other way here =/

you guys were absolutely right! i knew before that jpeg is a compressed format, but the bmp is actually around 13mb big, that is really too much. Well i really will have to split the image. but thus week i have no time, due to another paper i have to write...
last question: what would be the best approach here?
1. one big panel and draw the images at the right position? (seems not good to me, cause i would have to repaint the panel with all images over and over again)
2. different panels to paint the pieces in?
3. different picture boxes to load the images into?
thanks very much for your help!

Sepplo said:
you guys were absolutely right! i knew before that jpeg is a compressed format, but the bmp is actually around 13mb big, that is really too much. Well i really will have to split the image. but thus week i have no time, due to another paper i have to write...
last question: what would be the best approach here?
1. one big panel and draw the images at the right position? (seems not good to me, cause i would have to repaint the panel with all images over and over again)
2. different panels to paint the pieces in?
3. different picture boxes to load the images into?
thanks very much for your help!
Click to expand...
Click to collapse
What do you mean by 'panel'?

Related

Today plugins

Recently i was thinking about creating an app which would show me my remaining calltime with one of polish prepaid services. I imagine it would work like that:
1. receiving a specific text message with my account balance from my operator the app would capture it and store the value
2. after each call being made operator sends sms with call cost. this should be deducted from previously stored value. etc etc.
3. value should be displayed somewhere, like on today plugin...
seems simple, but theres a catch;] i can't code for WM5. i just got myself delphi 2006 today and i see it has limited CF support so i can create applicatons... but am i able to create Dlls? also i don't have clue about creating dll's at all, especialy those for WM5. is it even possible with .net? is there any chance for me?
i know, i know, i shoud start to use c++ long time ago, but i'm affraid it' might be a bit to late for me;]
ps. is there anything like WM5 sdk, any guide kit for programmers, specs of any kind? where to look for it? thanks for any help. please note, i'd like to become one of you guys, i could even be of some value;]
heard somewhere that today plugins
cant be written in .net
here is a link to the subject of today plugins
http://forum.xda-developers.com:80/showthread.php?t=234162&highlight=codeguru
thanks, gonna try it in a minute.
(today unbelievable happened - my wizards battery got empty )
interesting. i'll consider switching to c++. as far as i understand it's not normal C, its some kind of mobile oriented c? but no connection with .net? how does it work?
Ok.
C++ is an extension of C to include object oriented programming. The language is not specific for mobile devices, so any book / article on the subject will do for starters.
I taught my self C++ after learning Pascal (Delphi is for Pascal right?) in school and it was quite easy because the languages have similar structure.
Your second stop is to learn WIN32 programming. I don't know how Delphi deals with APIs and function exports (that's what you need for DLLs).
Basically WM programming is very similar to desktop windows programming, except for a few miner difference (like all APIs using only Unicode).
You can download a free development tool called eVC 4 from MS. It looks exactly like Visual Studio 6 if you have any experience with that.
Unfortunately system DLLs like plugins can not be written using .NET but if you search MSDN (I really don't remember the link), there is an article on how to use a basic C++ DLL for the plugin and delegate all the real functionality to a .NET DLL.
Good luck.
yes, delphi is much like pascal
i know it's not that hard if you mean the structure. i just don't know how to start. in fact i got myself evc yesterday, after what you say i'll take good lok at it as soon as i prepare some room on my HD.
Delphi does well with windows api - as far as i can tell, i played with theese a bit so it shouldn't be hard to catch up when starting with c++. other thing is i never did dll, although i know how it works in general, i also used other peoples dll's in my programs. will do i hope. also, Rudegar provided us with good tutorial/example on today dlls, so i hope i'll be able to expand it. the only thing, i'm a bit anxious. you say evc is good for starters? ok, going to give it a try.
what a week, four days, four new RAD environments already
delphi is object pascal which is an extention of pascal like c++ is of c
c programs should compile without any problems in c++
Hi,
I saw a way to develop today plugins in .net : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnppcgen/html/TodayScrn.asp?_r=1
I did not try and I guess it will slow down the device as .net is not very fast, but you can try...
Good luck

anyone got VSpainter working?

I have downloaded vspainter LE from here:
http://www.virtualspaghetti.com/index.php?index=3&language=en
But when i start it it immediately crashes back to programs. It should be compatible right? its in the compatible software list on the xda wiki. Can anyone explain to me how to get it working?
Greetings.
edit: just installed vsbenchmark, and that completely froze my device... :-( really hope they fix those programs soon.
In order to use VSPainter, you have to install the WVGA Fix, and then switch your screen to 640*480, cause VSPainter doesn't work with a 800*480 resolution.
damnit! it would be soooo awesome in 800x480
I completely agree. It's a shame to see all these programs for WinMo which seem to have the resolution "hardcoded" in them, where every applications on a regular computer can adapt to any resolution you're using.
Zaza le Nounours said:
I completely agree. It's a shame to see all these programs for WinMo which seem to have the resolution "hardcoded" in them, where every applications on a regular computer can adapt to any resolution you're using.
Click to expand...
Click to collapse
you, you would think adaptive resolution wouldnt be that hard to create, even if its only getting bigger and bigger.
anyway, can someone advise me another drawing app, wich does work at 800 x480?
Snuurtje said:
you, you would think adaptive resolution wouldnt be that hard to create, even if its only getting bigger and bigger.
Click to expand...
Click to collapse
I must confess I don't know anything about programming. But even if the resolution of a program is not adaptive, the programs could been at least coded for the different resolutions used on telephones, as there isn't a lot of them : SQVGA, QVGA, SVGA, VGA, WVGA... and that's about it.
i know about programming (not professional) and imo its not that hard to program adaptive windows, especially because there is almost always an area that isnt fix (like a toolbar or something), which is the only thing that has to adapt.
anyways.. its a shame many programs dont work, especially vspainter which looks pretty good. there is lots of programming involved and i bet much more complex than an adaptive window
I guess they are just currently working on new versions (also for their other apps) to match the wvga resolution which is gaining momentum with the HD and the X1.
I use VirtualNotepad2 and they released a bug fix for WVGA but this leaves a lot to be desired since it just stretches the current graphics to WVGA mode making them a little bit blurry. I am really looking forward to their normal WVGA versions.
allright good to hear they are working on it. But i still need a little schetch app, if it were only to paint black lines and save it to .jpg Anyone able to recommend one that works?
Yaaaay, i found a great painting app! It's called pocket artist, it does a LOT i want a painting and photo editing to do. The only thing i havent managed to find is a layers function like in photoshop. Furthermore it does have a lot of similar functions photoshop does. Im in the process of uploading a youtube video i just shot.
here is the link its still converting though, should be up shortly:
http://nl.youtube.com/watch?v=vmfNqOHJxPU
this isn't so good, VSpainter is more powerful
To me Vspainter is worthless without it working fullscreen. By the way i have discovered layers in this app. You can do a lot with it what can be done with photoshop aswell. Precise selection, layers. gradient, text, diverse filters, cropping, resizing rotating.

Run exe in WM

Hi!
is it somehow possible to run exe file, that is for desktop windows, on WM6.1?
I was installing some software, and was unable to run keygen, until I reached my PC.
I'm using WM 6.1 on HTC HD.
Thanks
Perhaps you should describe what is keygen?
Keygen is some small executable file, that usually display graphical form and generates some numeric (or another) data on the output.
philous said:
is it somehow possible to run exe file, that is for desktop windows, on WM6.1? Thanks
Click to expand...
Click to collapse
Long story short: no. You can't just drop an application compiled for Win32 to WinMo and launch it. Even for .NET-stuff the loader-stub-thingamagic (can you tell I've got near to zero .NET-programming experience :-?) that passes the code to the runtime is for a different processor architechture. (and AFAIK XScale/ARM and x86 don't really match)
I guess it could be done with some really weird conditional PE-header wizardy (winmo uses the same kind of portable executable as win32, right?).
But more to the point, I thought discussing warez-related stuff on these boards wasn't ok
I'm sure someone with far more experience in WinMo-development will come along and correct me any minute
shisux said:
Long story short: no. You can't just drop an application compiled for Win32 to WinMo and launch it. Even for .NET-stuff the loader-stub-thingamagic (can you tell I've got near to zero .NET-programming experience :-?) that passes the code to the runtime is for a different processor architechture. (and AFAIK XScale/ARM and x86 don't really match)
I guess it could be done with some really weird conditional PE-header wizardy (winmo uses the same kind of portable executable as win32, right?).
But more to the point, I thought discussing warez-related stuff on these boards wasn't ok
I'm sure someone with far more experience in WinMo-development will come along and correct me any minute
Click to expand...
Click to collapse
well, yeah, I also didn't think that it's possible because of different processor architectures, but maybe somebody heard something about that..
Miracles happens
We are not discussing warez stuff, the question thesis is different.

DjVu reader for WM 6.5.x

Hi,
I'm looking for a DjVu reader running on the newest versions of WM (6.5.x).
I've found some pretty old projects:
pocketDjVu and DjVuCE
I'm going to try them tomorrow if they work.
But I would rather have a fingerfriendly DjVu reader that is made for WM 6.5 (or 6.1 at least, lol).
Any tips ?
They should support WVGA and 800x480 px.
Or perhaps there is a plugin for Adobe Reader?
Update:
I tried pocketDjVu and runs quite well on my 280xx build.
It works with WVGA and except for the option menu you can controll it with your fingers. Not perfect as it was made for WM5 but acceptable.
When zooming it makes a notification that there is not enough RAM for this size but it still works.
Please feel free to post other DjVu readers as there may be a better one .
Anyone else with experience to share in regards to WM 6.1 and application mentioned above or any other app suitable for opening DjVu files?
i tried one of the two programs mentioned above,but i couldnt get my phone to associate it with djvu files.
it would only say "this file is not associated with any...." etc..
+ when i tried to find it inside the program istself it didnt list any of the djvu files.
any tips?
any tips?
Click to expand...
Click to collapse
nope, but i can assure you, that this filetype is useless on PDA's.
Let me say this again:
i am fanatic of collecting methods for opening as many filetypes as possible on PDA and that one is not suitable for that kind of devices. Maybe it was matter of size of files i tested, i am not sure about it, page loading was puren nonsense.
Now, what to do?
..i am struggling too. ideal situation would be converting djvu to CBR/CBZ, but...jesus, this would be nightmare.
UPDATE:
any tips?
Click to expand...
Click to collapse
quick thought:
did you try to add gsgetfile/tgetfile to your system(file requester changer, A MUST, imo)?
if i am thinking right, maybe that problematic software is just using default WM requester and it is just NOT searching inside of card subfolders. i do not remember what the problem was with these programs - you may try copying test file into /my documents to check, if it became visible(i know, ridiculous advice, but..).
otherwise, use total commander(PPC) for force-assigning filetype to djvu software - it may not work sometimes(it depends, if software can properly use %s's).

Language of choice

Just curious..What is everyone's programming language of choice when developing apps for WinMo?
Ive been working (lightly) on a VB program, which is ok, but i feel it isnt as efficient as others might be, and i know efficiency and size is a big issue on mobile devices (obviously)
Depends:
A simple program or one that can be done just using the stuff in the standard system DLLs then I will go for the pain of coding it in WIN32 C++. The resulting application runs like the wind, and can be distributed as a single executable file, no CAB, no installation projects, etc etc.
If I need any web or fancy data functionality, then it is .NET, because it is not worth the hassle of getting all this to work from levels lower down.
Having had lots of previous coding experience in C/C++ then C# is the natural choice, but as far as .NET is concerned, the actual language you code in is irrelevant. It compiles down to IL anyway and the CPU 'JIT' compiles this into its own code before it runs. Hence the performance hit when the program starts and runs.
In .NET, in essence, all you are doing anyway, is creating .NET objects, setting their properties and calling their methods, in order to get them to do what your application requires. A simplistic view, I know, but that's is all there is to it!
The language that you use to do this doesn't really matter, it is just personal preference.
I guess i assumed one language had more efficantcy than another. Like im working with VB atm, and i know it simplifies alot of things to make it easier to use, not sure if it includes all that extra code in the final build or not tho.
I would like to get more pratice with C++ and i have yet to use C# so dono whats different about that.
I would like to eventually start making programs that utilize the .net code and get my programs talking though data on the phone, but im not that advanced yet.
currently im still trying to wrap my head about making a program with a local database. The program im working on currently doesn't store any data, but i would like to to. I would also like (if i get ambitious) to have that program possibly talk to a PC (parent) program and sync with it. But that i think is a ways off.
Also, do the Mobile SDK's look different? The program im working on i started in the 5 SDK, but (obviously) doesnt have Finger friendly IU tools. I haven't looked at the 6/6.5 SDK yet (as id have to start over again i think). Does it have more finger friendly options?
In .NET CF, the finger-friendlinnes and kinetic scrolling and this all isn't available for all controls. Most of them (the classic ones) are, but if you try using scrolling for whole form, it won't work, only scrollbar will. (Probably with some playing with physicsengine and marshalling you might be able to get it working here, too).
In C++, there are numerous examples of this gestures etc directly in SDK, also many other stuff is there.
See, the main difference here is that .NET is fully equipped with stuff to get everything done fast, easy way.
In C++, you must first make this way yourself .
i am using the .net 3.5 framework tho.. Unless you mean C++ vs C#. I thought .net was an expansion on a current language, and not a language on it self (meaning i cant choose to program in .net, its an option to VB, C++ or C#)
I did toy with it, and it appears as tho your right, the forums are the same. IE drop down/combo boxes are not finger friendly. Guess id have to turn it to a button and another form with large radio button options.
C# vs C++ main difference is that C++ is compiled to native code right on first time, which makes it very fast. C# is compiled to MSIL, which is NOT native code yet. When you run c# app, the code is being Just-In-Time (JIT) compiled to native code, which makes it "longer" to load and "slower" to run (usually that makes about 20% of speeddown on classic PCs with very optimalized C++ same code - it probably already is lower, this is a bit older result of testing).
C# has those nice features that it can't get out of its memory etc, the JIT is almost unhackable, so you can't write viruses in it etc.
As far as the SDKs are concerned, there are slight differences from one version to the next but they can be quite difficult to spot.
They can become issues, when code written to run on one platform is run on one several generations away. I have a program that was written in C++ WM2003. Works under all versions of WM until 6.5.3, when the About Dialog box fails to close if the (X) button is pressed. Turns out another value has to be added to the dialogbox flags field to get it to behave properly.
This has been a feature of SDK's from WM 5.0 onwards, but the WM2003 SDK is unaware of it. You have to add it manually to the shell code created by the SDK,
Progress I suppose. The full article is here:
http://forum.xda-developers.com/showthread.php?t=635063
Treo 700xw Verizon Spanish language
Hello fellow .... I'm new to this forum
I have a Treo 700wx and I live in Mexico ...
My Treo is Verizon's company and is currently with the version 1.22 ...
My problem is that it is in English and I need to change the language in Spanish ...
Thank you for your support both the need
Greetings
stephj said:
As far as the SDKs are concerned, there are slight differences from one version to the next but they can be quite difficult to spot.
They can become issues, when code written to run on one platform is run on one several generations away. I have a program that was written in C++ WM2003. Works under all versions of WM until 6.5.3, when the About Dialog box fails to close if the (X) button is pressed. Turns out another value has to be added to the dialogbox flags field to get it to behave properly.
This has been a feature of SDK's from WM 5.0 onwards, but the WM2003 SDK is unaware of it. You have to add it manually to the shell code created by the SDK,
Progress I suppose. The full article is here:
http://forum.xda-developers.com/showthread.php?t=635063
Click to expand...
Click to collapse
I noticed something else odd. When i run the app on my pone, the resolution is off. Now everything looks ok, i just mean that when i run it on my phone, theirs alot of "white dead space" at the bottom. I can only guess this is due to the SDK's catered to phones with smaller screen resolutions (ie Touch Pro) with buttons.. Is their a way for me to switch the resolution to ultilize the full Touch Pro 2 screen size (480x320 i think)?
Funny you should mention that. I replied to a similar post a short while ago. I'm not going to type it all in again, it's here.
http://forum.xda-developers.com/showthread.php?t=637417

Categories

Resources