Don't you love it when you learn something new?
Jerron thanks for the offer. No need to send me one I got it working. I
started a new solution from scratch and it just worked (initially I
thought
maybe it was a language thing so I tried both VB and C# and they both
worked.). I still have absolutely no idea why my original project does
not
work (it still doesn't!), while it works on the desktop fine, but I think
I
am going to have to let it go.
BTW, you don't need to move the Main function to its own class and you
don't
need to create a static constructor in a separate one (in fact static
ctors
are not guaranteed to run unless needed); I dropped the code in just
before
Application.Run.
Searching the web I found other places that discuss this technique... if
anybody knows where it originated from (for future reference) feel free
to
let me know
Cheers
Daniel
--
http://www.danielmoth.com/Blog/
Hi Daniel,
I've done what Alex is talking about, You can even inherit your main
form
from a custom form in the dll. I did it by.
1. creating a new class in the application
2. creating static constructor for that class ( this is where you would
put
the code to extract your dll, you just need to extract it to the same
location as your .exe, the clr will look for it there)
3. moving static void main() function out of the form and into the new
class.
This will allow you to extract the dll before the clr tries to load it.
In fact I include all of the resources as embedded resources. This way
I
don't need to create a .cab to install the app. We can send the same
.exe
to
a customer to test on their desktop as the one we put on their device,
with
no install. I also had problems debugging with the emulator with
images
built as content that were stored in folders. The images would be
deployed
to the emulator with a flat directory structure so the app couldn't
locate
them. Embedding them into the project and extracting them in the same
manor
as the custom control dll fixed this.
I was working on an example that I was going to post at some point but
never
got around to it, I will go ahead and send it to you
Kind Regards,
Jerron
:
That is fine on the desktop and for the benefit of the archives the
code
snippet needs to close the stream before using types from the assembly
(and
should check if the file already exists before creating it).
On the CF it seems the dependencies are checked before any user code
gets
a
chance to execute, so I cannot get it working. If you have a working
CF
example please send it to me (I am interested in it from a POC point
of
view
.
Cheers
Daniel
--
http://www.danielmoth.com/Blog/
You can add DLL to the project, mark it as embedded resource, then,
upon
loading your application, check for the dll existence in the file
system
and if it's not there, simply copy it there from the resource
stream.
Stream strDLL =
Assembly.GetExecutingAssembly().GetManifestResourceStream("MyNameSpace.MyDll.dll");
//Case sensitive
string path =
Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetModules()[0].FullyQualifiedName);
FileStream fs = File.Create(path + "\\MyDLL.dll");
int nRead = -1;
byte[] buffer = new byte[4096];
while(nRead != 0)
{
nRead = strDLL.Read(buffer, 0, buffer.Length);
if ( nRead > 0 )
fs.Write(buffer, 0, nRead);
}
--
Alex Feinman
---
Visit
http://www.opennetcf.org
HI,
It is possible to include a custom control dll in the exe file so
that
the
dll isn't a standalone file that will have to be copied to the PDA
along
with the exe file?
Thanks,
Ole