|
I'm getting an exception that looks like below when my debug C# app calls
into my debug C++ dll (which uses the MS CRT, debug dll).
Apparently if I go to the Menu>Debug>Exceptions>Managed Debugging Assistants
and unchecked Loader Lock checkbox, the exception goes away but I get a
message saying that I'm trying to use a dll that's loading the CRT without a
manifest file.
This must all be part of this new manifest side-by-side stuff that is
introduced in VS2K5. However I am not getting this problem when I run the
release build of my solution and I cannot for the life of me figure out what
Microsoft wants you to do here. All I want to do is call into my dll, why has
this become so hard to do in the new version of VS.NET ??
Loader Lock was detected:<br />
Attempting managed execution inside OS Loader lock. Do not attempt to run <br />
managed code inside a DllMain or image initialization function since doing so <br />
can cause the application to hang.<br />
-- modified at 18:14 Monday 5th December, 2005
|
|
|
|
|
|
Well that changed the way the error was thrown, but it looks to be throwing the same error.
Here's what it is saying:
Managed Debugging Assistant 'LoaderLock' has detected a problem in 'D:\Dev\throwaway\pinvoke\pinvoke\bin\Debug\pinvoke.exe'.<br />
Additional Information: Attempting managed execution inside OS Loader lock. Do not attempt to run managed code inside a DllMain or image initialization function since doing so can cause the application to hang.[/code]<br />
<br />
Here is what my DllMain looks like, but again why isn't this happening with my release version?<br />
<br />
<code><br />
BOOL APIENTRY DllMain( HMODULE hModule,<br />
DWORD ul_reason_for_call,<br />
LPVOID lpReserved<br />
)<br />
{<br />
switch (ul_reason_for_call)<br />
{<br />
case DLL_PROCESS_ATTACH:<br />
case DLL_THREAD_ATTACH:<br />
case DLL_THREAD_DETACH:<br />
case DLL_PROCESS_DETACH:<br />
break;<br />
}<br />
return TRUE;<br />
}
|
|
|
|
|
I need to call three C++ methods from C# which are defined as follows:
initHdr(HDR **hdr)
readHdr(HDR *hdr)
freeHdr(HDR **hdr)
The HDR struct is defined as follows:
typedef struct HDR {
long hdr_size;
unsigned char *hdr_data;
}
initHdr - mallocs hdr and hdr_data.
readHdr - fills hdr_data.
freeHdr - frees hdr_data and hdr.
I am trying to write a test program in C# that calls these three methods and use the data.
Any suggestions on the best approach to take, and how to declare the struct in C#. I'm struggling with how to declare an unsigned char pointer in C#. I thought that "unsafe" allowed you to declare C++ types, but I wasn't able to do it.
Thanks, Cindy
|
|
|
|
|
www.pinvoke.net[^] is the BEST source of info on this stuff around.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
Cindy,
First, have a peek at PInvoke.net[^]. It's a great website that can help you out with lots of examples of calling native code from managed code, which is what you're trying to do.
Secondly, the unsafe keyword just lets you use pointers. It doesn't allow you to write C++ types in C# code.
So go look at PInvoke.net, as you'll find examples of how to marshal things like unsigned character pointers properly. If I were to guess (and this is only a guess), try something like
[System.Runtime.InteropServices.StructLayout(LayoutKind.Sequential)]
struct HDR
{
int hdr_size;
string hdr_data;
}
Tech, life, family, faith: Give me a visit.
I'm currently blogging about: Bought a House!
Judah Himango
|
|
|
|
|
Hi
I've got a problem with CodeDom Serialization. Could anybody HELP me?
Please spend some time to read the description 'cause I spent 5 days to find clasic solution and I don't have it yet.
I've got custom control:
[DesignerAttribute(typeof(MThemeControlDesigner)), DesignerSerializer(typeof(MThemeControlCodeDomSerializer), typeof(CodeDomSerializer))]
public class MThemeControl : System.Windows.Forms.UserControl
it has property:
[Category("Appearance"), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public ControlColors Colors{get{return _theme.Colors;}}
there is ControlColors class declaration:
[TypeConverter(typeof(ControlColorsTypeConverter))]
public class ControlColors
{
..........
public ColorSet AddColorSet(string Name, ColorSet BaseColorSet) {....}
......
}
I would like to have next code into Form Designer generated code:
this.mThemeControl1.Colors.AddColorSet("ColorSet1", this.mThemeControl1.Colors.ColorSets["Default"]);
It isn't so difficult, BUT:
When I try to switch to Design mode, I've got an exception:
C:\Work\C#\WindowsApplication1\WindowsApplication1\Form1.cs(65): The designer cannot process the code at line 65: this.mThemeControl1.Colors.AddColorSet("ColorSet1", this.mThemeControl1.Colors.ColorSets["Default"]); The code within the method 'InitializeComponent' is generated by the designer and should not be manually modified. Please remove any changes and try opening the designer again.
When I try to trace Deserialize method of MThemeControlCodeDomSerializer - i cannt do i 'cause exception throws early. When I try to trace any method of MThemeControlDesigner - the same.
HELP me please! What shall I do?
I didn't apply Serializator code 'cause it's very simple code, just append some CodeStatement expressions (...MethodRefenece and like this...)
|
|
|
|
|
My problem is resolved.
Actually, designer can't understand indexer in my code.
.... this.mThemeControl1.Colors.ColorSets["Default"] ....
I donno why it happen.
Just find to alternative way...
|
|
|
|
|
Hello everyone, I was wondering if there was a way to know when the X button was pressed at the upper right hand part of the screen
Thanks,
The Major Rager
|
|
|
|
|
The Closing and Closed events of the form both are activated by this click. Closing happens first and will allow you to abort the shutdown.
|
|
|
|
|
Do you have an example of how I would code something in that particular function?
|
|
|
|
|
You can do this inside the form itself, or using another object which has subscribed to the forms event.
1st within the form:
using System.Windows.Forms;
using System.ComponentModel;
class MyForm : Form
{
private bool stopUserFromClosingForm = true;
public MyForm()
{
}
protected override void OnClosing(CancelEventArgs e)
{
if(stopUserFromClosingForm)
{
e.Cancel = true;
}
}
}
or if another object has a reference to the form
static void Run()
{
Form myForm = new Form()
myForm.Closing += new CancelEventHandler(this.HandleFormClose);
myForm.Show()
}
private void HandleFormClose(object sender, CancelEventArgs e)
{
e.Cancel = true;
}
There is also a Closed event, which is juts a normal EventHandler - it has no Cancel property.
|
|
|
|
|
Thanks for replying, but I am using ASP.NET, which means Web Forms instead of just a Window Form, do you have an example for that?
|
|
|
|
|
Hi,
I'm not very familiar yet with going between forms and classes, and would love any help on this.
I have a main form which contains a class called Tabs . When the Search button is clicked, a new form opens up (this class is called called Searching ) which asks for some info. I'd like to take that info back with me when I close the form containing Searching without having to save it in an xml file.
So, I know I need to declare a public string which I'll call searchThis . Do I do this on the Tabs form, the Searching form, or both? (I tried a few things that didn't work, including declaring public string searchThis on the Tabs form, then public Tabs searchThis on the Searching form.) Next, I need to return a value for searchThis before closing my Searching form, then access it between showdialog and dispose on my Tabs form. What I have so far is:
(under Tabs)
public string searchThis;<br />
private void searchClick(object sender, System.EventArgs e)<br />
{<br />
Searching s = new Searching();<br />
s.ShowDialog();<br />
MessageBox.Show(searchThis);<br />
s.Dispose();<br />
}
(under Searching)
public Tabs searchThis;<br />
private void goClick(object sender, System.EventArgs e)<br />
{<br />
string searchThis = "";<br />
searchThis = "cust";<br />
this.Close();<br />
}
When I run it this way, the MessageBox comes up empty, so I must be having trouble saving searchThis's value.
Anyway, thanks so much for your help!
Mel
|
|
|
|
|
You were on the right track. This should work.
<br />
(under Tabs)<br />
private void searchClick(object sender, System.EventArgs e)<br />
{<br />
Searching s = new Searching();<br />
s.ShowDialog();<br />
MessageBox.Show(s.searchThis);<br />
s.Dispose();<br />
}<br />
|
|
|
|
|
The problem appears to be in your goClick, where you redefine searchThis as a local variable.
Here's more or less how I would do code it:
(Under Tabs)
private void searchClick(object sender, System.EventArgs e)
{
using (Searching s = new Searching())
{
if (s.ShowDialog(this) == DialogResult.OK)
MessageBox.Show(s.SearchThis);
}
}
(Under Searching)
public string SearchThis;
private void goClick(object sender, System.EventArgs e)
{
SearchThis = "cust";
DialogResult = DialogResult.OK;
Close();
}
Regards,
Alvaro
I cannot take anything the Bush administration does seriously. The corruption, the cynical disregard for humanity, the cronyism and incompetence, all wrapped in a slimey flag of ultra-marketed nationalism repulses me. -- consdubya from fark.com.
|
|
|
|
|
When I drag the width of the leftmost column of a listview to 0 pixels and begin expanding it back out again, if hte lv is drawn with gridlines except for the rows that are selected the line seperating the leftmost column from the one next to it will not be drawn unless the collumn is subsequently narrowed or something else forces a repaint. Is there any way to work around this and force a repaint?
|
|
|
|
|
Hi
I am trying to draw a rectangle over an existing image by using the following code (pb is the PictureBox and has an image)
Graphics oGraphics = Graphics.FromImage(pb.Image);<br />
oGraphics.DrawRectangle(new Pen(Color.Red, 2), new Rectangle(5, 5, 300, 300));<br />
pb.Refresh();
The problem comes when I want to draw another rectangle (at a different location) and I can't remove/clear the existing rectangle before drawing the new one.
Is there any way I can remove the existing drawn rectangle?
I don't want to use the pb.CreateGraphics() b/c the drawing is not consistent when this method is used.
I am using the FromImage() method b/c later I want to resize (zoom) or rotate the image with drawn rectangle and It won't require any further coding for rotating and resizing the rectangle.
I tried reload the Image again, but large images take to much time to load, so I want to avoid the Image reloading.
Please help!
|
|
|
|
|
Hi!
I'm afraid you can't do this. You'll have to store the base image somewhere, duplicate it and then perform all the painting you want to be seen one after the other. That way you don't modify the original image and you can draw the original version as often as you like.
In order to remove the rectangle you've drawn previously you'd have to remember all the pixel values for each pixel your rectangle is drawn over and then restore them one by one.
I strongly doubt that this is working efficiently, especially when you have more forms than just a rectangle.
Regards,
mav
|
|
|
|
|
If you modifiy an image like you do it in your example there is no way going back to a previous state. One solution would be to clone the whole image before altering it and going back to the original one when needed.
Another possibility would be to catch the Paint event of the PictureBox and paint the 'current' rectangle in the handler. It would probably even be a good idea to dump the PictureBox and draw image and rectangle yourself.
|
|
|
|
|
You have at least 2 solutions:
1. Create a class that extends PictureBox (or Control if you get adventurous) and override OnPaint().
2. Keep a copy of the image in memory.
I think the 1st option is the better choice because it opens the possibility for code-reuse and uses less memory.
Example:
public class PictureSelectionBox : PictureBox
{
private Rectangle selectionRect;
private Pen selectionPen;
public Rectangle CurrentSelection
{
get { return this.selectionRect; }
set
{
this.selectionRect = value;
this.Refresh();
}
}
public Pen SelectionPen
{
get { return this.selectionPen; }
set
{
this.selectionPen = value;
this.Refresh();
}
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (this.selectionPen != null &&
this.selectionRect.Width != 0 &&
this.selectionRect.Height != 0)
{
e.Graphics.DrawRectangle(this.selectionPen, this.selectionRect);
}
}
public void CommitSelection()
{
Graphics g = Graphics.FromImage(base.Image);
g.DrawRectangle(this.selectionPen, this.selectionRect);
g.Dispose();
this.CurrentSelection = new Rectangle(0, 0, 0, 0);
this.Refresh();
}
}
You could even override the OnMouseDown, OnMouseMove, and OnMouseUp events in the derived class to allow the user to make his/her selection. You better watch out with the use of Refresh() doing this though because you'll get some ugly flickering.
I'd either [DllImport] InvalidateRect() or something like:
Graphics g = this.CreateGraphics();
OnPaint(new PaintEventArgs(g, this.ClientRectangle));
g.Dispose();
Enjoy,
David
|
|
|
|
|
Thank You David,
Let me check it out!
|
|
|
|
|
I have 2 DateTime Vars.
DateTime dtFrom = '1/1/2005';
DateTime dtTo = '1/24/2005';
How can I select a period of: Week, 2 Weeks, Month...
And Divide the date range into it to something like this:
Example: 1 week:
1 2 3 4 5
======== ======== ========= ========= =========
1/1/2005 1/2/2005 1/9/2005 1/16/2005 1/23/2005
1/1/2005 1/8/2005 1/15/2005 1/22/2005 1/24/2005
======== ======== ========= ========= =========
|
|
|
|
|
First Row Differences:
1-1-05, 1-2-05 = 1 Day
1-2-05, 1-9-05 = 7 Days
1-9-05, 1-16-05 = 7 Days
1-16-05, 1-23-05 = 7 Days
Second Row Differences:
1-1-05, 1-8-05 = 7 Days
1-8-05, 1-15-05 = 7 Days
1-15-05, 1-22-05 = 7 Days
1-22-05, 1-24-05 = 2 Days
I don't see any patterns in the differences here, so what exactly do you want again?
What do you mean by "divide the date range into it" ?
What do you want to do?
Are looking for every Sunday/Saturday in the month?
The work-week days?
Display a calender to the screen?
David
|
|
|
|
|
you were reading this wrong.
1/1/2005 - 1/1/2005 - 1 (only one day cos' it is last day of a week)
1/2/2005 - 1/8/2005 - 2 (full second week)
...and so on...
got it?
|
|
|
|