|
I am sending binary data between C# and C++ successfully. However, I would like to convert the C++ time_t, which is a 32 bit long in C++ to a C# DateTime. Does anyone have a solution off hand for converting time_t to a C# DateTime value and from a C# DateTime to a C++ time_t?
|
|
|
|
|
Since time_t is just an unsigned 32-bit integer, you can use uint (alias for UInt32 ), but I recommend you don't depending on how you use it because unsigned types in .NET are not CLS-compliant (i.e., less portable code). Whenever you need to pass it to unmanaged code or get it back, you can use the MarshalAsAttribute with UnmanagedType.U4 . For instance, 0xffff is -1 for an Int32 while it is 65535 for a UInt64 . The value is still the same, it's just how it's interpreted. The marshaling I mentioned above will take care of this.
The biggest hurdle has to do with the epoch (start time) of each. time_t is the number of seconds that have ellapsed since 12:00 midnight, 1-1-1970. A DateTime in .NET represents the number of ticks (100 nanoseconds) since 12:00 midnight, 1-1-0001 AD. This definitely becomes a hurdle as I'm sure you can see.
One easy way to convert between the two is to create a DateTime that starts at the epoch of a time_t , and then add the number of seconds represented by time_t :
DateTime dt = DateTime.Parse("1970-01-01T00:00:00");
dt.AddSeconds(time_t); If you do this a lot, you might consider storing the return from DateTime.Parse as a read-only field of your class (the readonly keyword lets the field be set in the static or instance constructor and can never be set again, which is good since you can't use a const for a non-constant value like this).
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Two lines of code! Thank you much.
|
|
|
|
|
"For instance, 0xffff is -1 for an Int32 while it is 65535 for a UInt64"
I think that you'll find that 0xffff is 65535 for Int32 as well as in UInt16, UInt32, Int64 & UInt64 but -1 in Int16.
0xffffffff is -1 in Int32 & 4,294,967,295 in UInt32, Int64 & UInt64.
Regards
Brewman
|
|
|
|
|
Oops, that last part of the quote was actually supposed to be UInt32 , but you're right - I obviously couldn't perform basic math that day.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hi!
My code looks like this:
//----------------------------------------------------------------------------
input = new FileStream(tempDirectory + "\\" + tempArchiv.Dateiname, <br />
FileMode.Open);<br />
output = new FileStream(sicherungsOrt + "\\" + tempArchiv.Dateiname, <br />
FileMode.Create, <br />
FileAccess.Write);<br />
reader = new BinaryReader(input);<br />
writer = new BinaryWriter(output);
//here I read from the reader and write it to the file with the writer
//...
//then I flush and close the input, output, reader and writer
input.Close(); <br />
reader.Close();<br />
<br />
writer.Flush();<br />
output.Flush(); <br />
<br />
output.Close(); <br />
writer.Close();
//here I do other things, but I don't do anything with the files I wrote and read
//and then I try to delete the file I wrote, but it occurs an exception and I don't know why
System.IO.File.Delete(sicherungsOrt + "\\" + tempArchive.Dateiname)
//----------------------------------------------------------------------------
The Exception looks like this:
The process is not able to access the file, because an other process uses it.
What's wrong with my code?
thanks, Gerhard
|
|
|
|
|
The wrapper reader/writer classes will call the wrapped streams close/flush methods. I suggest u remove either and try again. Everything else looks fine to me.
top secret
|
|
|
|
|
Cool ... it works...
thank you!!!
|
|
|
|
|
One thing to add (since leppie already helped you solve the problem), use Path.Combine instead of concatenating your paths with separators yourself. This makes sure that the correct directory separate is used for the target platform without having to recompile. This makes your code more portable. Also, you can use the Path.DirectorySeparatorChar if you want to know which to use. Each platform's version of the CLR is responsible for returning the proper char . Path.Combine also takes into account whether the directory reference already ends in the appropriate directory separator. This usually isn't a problem, but you can never be too sure.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hi,
Does anyone know of what tools/sdk are available which would allow me to write server software to stream mp3 audio over the internet?
Thanks very much~
Regards,
John
|
|
|
|
|
This is a message for people who have been developping missing collection in .Net (such as sets, deque, etc...) or are simply missing those for every day life.
The objective is collect in a single project a number of forgotten data structures for .Net.
If you are interrested to contribute, observe or test, you can register at http://ncollection.tigris.org[^]
Jonathan de Halleux - www.dotnetwiki.org -
MbUnit - QuickGraph
|
|
|
|
|
Jumping the gun a bit?
Messages
Your account does not have the "Project Page - View" permission needed for you to access the page you requested in the ncollection project (view your permissions). Either ask the project administrator for more permission, or log in using a different account.
You are currently logged in as leppie.
top secret
|
|
|
|
|
|
On a lighter side, once you have collected all these joints, who will smoke them?
top secret
|
|
|
|
|
I'm more a beer-drinker type but I'm sure I could find people interrested for that kind of collection traversal.
Jonathan de Halleux - www.dotnetwiki.org -
MbUnit - QuickGraph
|
|
|
|
|
Don't you think it would be better to wait for generics for such exercise?
|
|
|
|
|
Maybe, on the other side, there are already at least 5 data structures scatered on CodeProject, not mentionning other internet resources, so the material is already there.
Besides, I do not think the "upgrade" to generics will be too painfull. The most cool feature, from a colleciton implementaiton view, is the new way of defining iterators which will be much more easier.
Besides, creating the framework to test the fixture will not be lost with generics.
Jonathan de Halleux - www.dotnetwiki.org -
MbUnit - QuickGraph
|
|
|
|
|
I saw you mention this idea earlier today (well, I saw it earlier today) and think it's a neat idea, but let me suggestion something: it's ".NET", not ".Net" or ".net" (in which case the latter is reserved for use by Microsoft and only in logos). This is documented on Microsoft's site.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
don't hesitate to sneak in the project...
Heath Stewart wrote:
it's ".NET", not ".Net" or ".net"
Aaaargh, am I going to get sue for this!
Jonathan de Halleux - www.dotnetwiki.org -
MbUnit - QuickGraph
|
|
|
|
|
Jonathan de Halleux wrote:
Aaaargh, am I going to get sue for this!
No, not unless you trademark a product with ".NET" (or any variant) in it and make enough money for Microsoft to care about (and even then, they might not so long as you're supporting their cause, but IANAL).
Just thought since you're making a go of this and will probably want it to look nice/official/whatever, you might want to use proper casing.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
|
I have a project where I want to have the value in a listbox displayed in ToolTip rather than the default tooltip text whenever a MouseOver event occurs. However, when I created the eventhandler I was a bit surprised to see that it does not appear to return the coordinates of the mouse on the control.
I know it can be done -- even VS does it when hovering over a collapsed region. Any suggestions on how to deploy this?
I need to
a) determine either from sender or e which field is being hovered over, then
b) if it is blank area (default text) or populated area (display value of field)
_____________________________________________
Of all the senses I could possibly lose, It is the one called 'common' that gets lost the most.
|
|
|
|
|
You can always use the static Control.MousePosition property to get a Point in screen coordinates, which you can translate by passing that Point to the PointToClient method of the ListBox . Using that, you can find which item is under the cursor.
Unless you want to go to the trouble of encapsulating the ToolTip common control and all its messages and what-not, you could use the ToolTip component and call SetToolTip(yourListBox, "Your tooltip") , but I'm not sure exactly how that positions itself (I would assume it uses the coordinates of the current mouse position like it usually does). You can call that each time you want to change the text.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Thanks Heath. I figured out everything but the static MousePosition location. That got me rolling with all the fun mathematics!
Could have been great but the MouseHover event seems to never be getting raised.
On to investigate that bugger now.
_____________________________________________
Of all the senses I could possibly lose, It is the one called 'common' that gets lost the most.
|
|
|
|
|
Hello everybody!
Does anybody know how to get information about an assembly using the System.Reflection namespace?
I want to list all namespaces,classes,methods,......
Please help me
petermax2
|
|
|
|