|
try db4o.
It's an object database, meaning you store the objects directly. It's fast to
develop and easy to use. But only for local stuff. I wouldn't use it as a DB server.
It's free under GPL. The learning curve it's a breeze.
The new version suports LINQ too.
Here is a direct link to their tutorial.
I bug
|
|
|
|
|
static string DecodeUnicode(string s)
{
StringBuilder sb=new StringBuilder();
while (s.Length!=0)
{
sb.Append((char)int.Parse(s.Substring(2, 4), NumberStyles.HexNumber));
s=s.Substring(6);
}
return sb.ToString();
}
string s="\\u092A\\u094B\\u0937\\u093E\\u0939\\u093E\\u0930";
s=DecodeUnicode(s);
I am using above code to remove "\\" into "\". But if we add some text in this string its gives error.
e.g.:string s="\\u092A\\u094B\\u0937\\u093E\\u0939\\u093E\\u0930 abc";
error msg shows: Input string doesn't match.
i think this issue occur due to, i divide substring(2,4)
please guide me.
thanx
|
|
|
|
|
if your input string does not consist only of \\uddd sequences (where each d is a digit), then you need to search for such substrings and replace them one by one by the character they represent.
|
|
|
|
|
Well, first... If you type this:
string s="\\u092A\\u094B\\u0937\\u093E\\u0939\\u093E\\u0930";
Then the compiler is already converting the double-backslashes to single-backslashes... But assuming you actually have the doubles in the string...
Try just using string.Replace() ...
s = s.Replace(@"\\",@"\")
The @ sign before the first quote tells C# to ignore the escape characters (Including things like newlines and tabs)... You could also write s.Replace("\\\\","\\");
|
|
|
|
|
Hi Ian,
this is yet another episode in a long story, I still don't know what his application is about, but I think of it as some sort of compiler, where the input actually does contain double slashed codes, and needs to treat the escapes. In the current post, the double backslashes are present inside some string which should not have been displayed as a string literal; proof of that is it all worked well until he appended "abc". I'm afraid he is still not really grasping what the escape mechanism does and doesn't do.
|
|
|
|
|
Well, Replace is still easier
|
|
|
|
|
I've been battling with this issue for a long time and have yet to find a solution that is reliable.
This is the basic flow.
UnmanagedResource.Open(delegate callback);
...
callback called with Opened message
...
... // app does interesting stuff
...
UnmanagedResource.Close(); // will return immediately
...
callback called with Closed message
The problem I have is this. If Close isn't called by the consumer before ending the app then nasty Earth ending stuff can happen. I can of course use the dispose pattern to call Close automatically and I have implemented just that.
This still leaves an issue with the callback though as there is no mechanism on the unmanaged side to unregister from this so the callback will happen but the managed delegate/class instance may no longer be valid when it does.
Is there a method of keeping a class/delegate instance alive inside a Dispose called from a finalizer until a specific callback has happened? Perhaps a blocking loop in Dispose that checks a value that is set in the callback. If this is viable, what is the best way to implement this as depending on the system, the callback may occur on the same or a different thread (I'm no threading expert!).
DaveIf this helped, please vote & accept answer!
Binging is like googling, it just feels dirtier.
Please take your VB.NET out of our nice case sensitive forum.(Pete O'Hanlon)
BTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)
|
|
|
|
|
|
Hi Luc,
We always seem to meet on unmanaged stuff
1 & 2 don't help as I need the finalizer to be called so I can call Dispose and in turn Close . I can't just allow it to 'disappear' as an Open resource may then be left behind. I can obviously blame any problems on the consumer for not specifically disposing/closing but I'd rather assume they are idots and have a failsafe in place.
3 will be of use if I can find a way to block until the callback triggered by close occurs.
4. This is a class library so no WinForms unfortunately (I'm back finishing off the MIDI thing and possibly adding audio as I mentioned the other day).
DaveIf this helped, please vote & accept answer!
Binging is like googling, it just feels dirtier.
Please take your VB.NET out of our nice case sensitive forum.(Pete O'Hanlon)
BTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)
|
|
|
|
|
You probably need to split each of those objects X into two managed objects:
- XFunctionality gets exposed to the user and takes care of real functionality;
- XUnmanagedResource, hidden from the user, deals with the management of the unmanaged resource only.
Obviously XFunctionality would create its XUnmanagedResource instance and keep a reference to it, probably when you call an Open(). The callback method however would be part of XFunctionality, so the XUnmanagedResource finalizer can cause it to be called even after XUnmanagedResource has died.
And XFunctionality would also contain a static List<XFunctionality> holding all live XFunctionality instances preventing any of them being collected without being closed first; the close-callback should then remove its XFunctionality object from that collection, making it collectible. And you could provide a static CloseAll() method enforcing all of the remaining ones to be closed.
|
|
|
|
|
Hmmm... I'm pretty sure I've already tried it like this. I'll do a quick mock up tonight and let you know.
DaveIf this helped, please vote & accept answer!
Binging is like googling, it just feels dirtier.
Please take your VB.NET out of our nice case sensitive forum.(Pete O'Hanlon)
BTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)
|
|
|
|
|
Hi Luc,
I've done alot of experimentation with this over the last 24 hours which has lead to trying SafeHandles and all kinds of stuff.
It seems the key to the solution is:
Luc Pattyn wrote: XFunctionality would also contain a static List<XFunctionality>
In the MidiDevice base class I have created two static List s which are filled in a static constructor.
protected static List<MidiInput> inputs;
protected static List<MidiOutput> outputs;
static MidiDevice()
{
uint inputCount = NativeMethods.midiInGetNumDevs();
inputs = new List<MidiInput>((int)inputCount);
if (inputCount > 0)
for (uint u = 0; u < inputCount; u++)
inputs.Add(new MidiInput(u));
uint outputCount = NativeMethods.midiOutGetNumDevs();
outputs = new List<MidiOutput>((int)outputCount);
if (outputCount > 0)
for (uint u = 0; u < outputCount; u++)
outputs.Add(new MidiOutput(u));
}
which are exposed as ReadOnlyCollection s in the derived classes.
public static ReadOnlyCollection<MidiOutput> Outputs
{
get { return outputs.AsReadOnly(); }
}
This seems to be enough to trigger the finalizer for each MidiDevice instance on application close where I can call Close (I'm using GC.KeepAlive(this) as an added safety net) and the callback also happens.
~MidiDevice()
{
Close();
GC.KeepAlive(this);
}
This is working perfectly with the hardware I'm using for testing at the moment!
Any further thoughts or comments?
DaveIf this helped, please vote & accept answer!
Binging is like googling, it just feels dirtier.
Please take your VB.NET out of our nice case sensitive forum.(Pete O'Hanlon)
BTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)
|
|
|
|
|
Hi Dave,
this sounds good
Only petty comments such as:
- no need to test inputCount, outputCount
- I don't like the method name midiInGetNumDevs (verb not first, casing wrong)
- you'd better use int everywhere, there's too many casts right now.
And then I'm completely lost at GC.KeepAlive(this);
1. what is "this"? isn't everything static there? how can that compile? I would never expect "this" in KeepAlive, as it is "this" that is running the code anyhow.
2. and do you really need it?
|
|
|
|
|
Luc Pattyn wrote: no need to test inputCount, outputCount
Redundant code from previous tests - oops!
Luc Pattyn wrote: don't like the method name midiInGetNumDevs
That's an API function that I'm P/Invoking. It's not exposed externally in it's full ugliness.
Luc Pattyn wrote: you'd better use int everywhere, there's too many casts right now
The API uses UINT for all these values so I'm using the same. The casts are for list creation as they require int s. I have thought about creating a genericlist that can hold UInt32.MaxValue elements to make sure there is no problem even with a rediculous number of devices available.
Luc Pattyn wrote: what is "this"? isn't everything static there?
The finalizer runs on each MidiDevice instance. Only the lists in that class are static.
Luc Pattyn wrote: I would never expect "this" in KeepAlive, as it is "this" that is running the code anyhow.
I did some reading up on the finalizer and that is not necessarily the case. Any objects the instance would normally hold could have already been finalized or in a race condition with this finalizer. Using this prevents this. This is what I've gathered from the brief reading I've done and should not be interpreted as fact!
Luc Pattyn wrote: and do you really need it?
I don't think so as the static list is keeping it alive anyway AFIK.
DaveIf this helped, please vote & accept answer!
Binging is like googling, it just feels dirtier.
Please take your VB.NET out of our nice case sensitive forum.(Pete O'Hanlon)
BTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)
|
|
|
|
|
What I meant was:
int inputCount = (int)NativeMethods.midiInGetNumDevs();
would yield nicer code.
You will run out of physical memory (and virtual too) long before you come anywhere near MaxValue!
|
|
|
|
|
Luc Pattyn wrote: You will run out of physical memory (and virtual too) long before you come anywhere near MaxValue
At the moment yes, but we all know things change quickly in the world of computing. Will that statement still hold true in 10 years time?
DaveIf this helped, please vote & accept answer!
Binging is like googling, it just feels dirtier.
Please take your VB.NET out of our nice case sensitive forum.(Pete O'Hanlon)
BTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)
|
|
|
|
|
helllo..
i have a value stored in a session['foo']="bar";
and as sessions can be accessed in al the pages.. is there any way how to make the sessions inaccisssible in a specific page...
... thanks and regards..
|
|
|
|
|
May i ask why you want to achieve something like that? Since your Page inherits from base type Page it allways should have access to the Session-Property. One thing you can try is to implement a BasePage-class that inherits from Page. In this class you set the access to Session as a private Member. e.g.:
private HttpSessionState Session
{
get{return base.Session;}
}
But i dont know if this will work.
When in trouble,
when in doubt,
run in circles,
scream and shout
|
|
|
|
|
actually this was asked to me in an interview.. and my answer was to clear all the session variables on the page_init;
he told that is there some kind of markup in the page which does this thing of skipping the session values for a single page... so is there any other way around...
|
|
|
|
|
Hi,
Customer wants to draw a rectangle on the image and when zoom in and zoom out the position of the drawn rectangle should resize respectively.
Ex:
say a some text in the image and i have drawn a rectangle for that text. If i zoom the image the rectangle should also changes so they still covers that text on the image.
I don't want to paint (paste) the rectangle on the image because like to change the position the rectangle when ever user likes (i have achived this part so don't need ti wary on this)
I have load the image in the picture box and drawn some rectangles. Now like to zoom the image (along with drawn rectangle) as below code. My problem is when i zoom the image the Rectangle in the top of the image aligned correctly (at the new position) but the x point of the rectangle in the 3/4 (of the height of picture box)slightly move right.
How can resize the all rectangles?
Thanks in advance......
public void ZoomIn()
{
double ratio = 0d;
if (sz1.Width >= Convert.ToInt16(sz.Width * 2.2))
{
MessageBox.Show("Max ZoomIn");
}
else
{
sz1.Width += 50;
sz1.Height += 50;
ratio = Convert.ToDouble(sz1.Width) / Convert.ToDouble(pictureBox1.Width);
pictureBox1.Size = sz1;
PropertyInfo pInfo = pictureBox1.GetType().GetProperty("ImageRectangle",
System.Reflection.BindingFlags.Public |
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance);
rect1 = (Rectangle)pInfo.GetValue(pictureBox1, null);
n2 = rect1.Y - n3;
n3 = rect1.Y;
Point pf = pictureBox1.Location;
pf.Offset(-25, -n2);
pictureBox1.Location = pf;
for (c = 0; c <= (rectangles.Count - 1); c++)
{
rect1.X = Convert.ToInt16(Convert.ToDouble(rectangles[c].X) * ratio);
rect1.Width = Convert.ToInt16(Convert.ToDouble(rectangles[c].Width) * ratio);
rect1.Y = Convert.ToInt16(Convert.ToDouble(rectangles[c].Y) * ratio) + n2;
rect1.Height = Convert.ToInt16((Convert.ToDouble(rectangles[c].Height) * ratio);
rectangles.RemoveAt(c);
rectangles.Insert(c, rect1);
}
}
}
|
|
|
|
|
to me this is yet another proof PictureBox is not a good Control at all: as soon as you want to do more than just showing an image as is, it starts to work against you.
Here is my approach:
- use whatever Control you choose, and paint everything yourself, on top of it, using a Paint handler; I typically suggest a Panel.
- use Graphics.DrawImage() to paint (part of) the image
- and Graphics.DrawRectangle() to paint the rectangle
- and Graphics.DrawString() to paint the text.
optionally use any of the transform methods to change the origin (TranslateTransform), rotation (RotateTransform), or scaling (ScaleTransform). The big advantage is these work identically on all drawing components (image, rectangle, text), provided the transforms are executed before any of the drawing occurs.
Warning: initially you may make some mistakes in determining the correct transformations and your drawing parts may lie outside the view, therefore it is recommended to start with a view larger than is required.
|
|
|
|
|
Hi,
I have painted the image on the panel and drawn rectangle. now i like to move the rectangle and i succeed on that. My problem is when i use panel.invalidate in paint or in mouse move, panle get refeshed every time (all the things getting blink every time when i move the mouse over the panel).
SO i used panel.invalidate in other events (mouse click, mouse move down)and can't able to see the moving of rectangle. (the panel only get refreshed after i release the mouse left click)
My question is how can refesh the panle so the moving rectangle will only get refeshed rather than all drawn things in panel (just to top blink very time i move the rectangle or get refersh such just it should not seen in naked eye).
I achieved this in picture box.
|
|
|
|
|
Yes everything will be redrawn all the time, to make that happen unnoticed you should consider using double-buffering; this article[^] has an example. You should also make sure to keep your Paint handler lightweight, i.e. avoid Control.CreateGraphics, Image.FromFile, and other expensive operations.
FWIW: for really complex graphics (what you described is not), you could also repaint the relevant parts only, i.e. rely on clipping, probably based on the rectangular hull of the old and new rectangle.
|
|
|
|
|
Have loaded the image and drawn the rectangle over the panel. When zoom the panel the rectangle position also changed. if i drawn a rectangle over a text on the image and when zoomed the panel the rectangle needs to cover that text portion after zoomed.
How i get this....
Thanks....
|
|
|
|
|
Without seeing the code, I can't tell for sure where you went wrong.
IMO the right approach was explained here[^].
|
|
|
|