|
The result I see in the watch window is 12589219.698272036, not 12589220.0.
(the real result is 12589219.698272036743164).
The decimal type can be used (28 digit precision) :
decimal d1 = 12589230.0342M;
decimal d2 = -10.335927963256836M;
decimal d = d1 + d2;
and I get the real result in the watch window.
|
|
|
|
|
YOU'RE right!!!!!
Now that makes things even weirder....
My actual code....
public void Translate(double x, double y, double z)
{
foreach(DPoint p in points)
{
p.x += x;
p.y += y;
p.z += z;
}
}
a Dpoint is just 3 doubles x,y,z
on the first iteration of the foreach:
x=12589230.0342
y = 693719.8863
z = 0.0
p.x = -10.335927963256836
p.y = 9.6102085113525391
p.z = 5.7499995231628418
after first iteration
p.x = 12589220.0
p.y = 693729.5
p.z = 5.7499995231628418
I'm trying to replicate problem is a simple app now...
|
|
|
|
|
This snippet:
decimal px = -10.335927963256836M;<br />
<br />
<br />
decimal ix = 12589230.0342M;<br />
<br />
<br />
decimal nx= px + ix;<br />
<br />
double d = Convert.ToDouble(nx);<br />
<br />
double c = 2;
Works as long as it happens before this line:
device = new Device(graphicsSettings.AdapterOrdinal, graphicsSettings.DevType,
windowed ? ourRenderTarget : this , createFlags, presentParams);
If it happens the line after I get my problem....
now that is messed up, how can it change the behavior of a built in type????
|
|
|
|
|
OK, When you create a directx device it changes all operations to single precision. It can be overridden with the fpupreserve flag.
Thanks for the help.
-Sam
|
|
|
|
|
In C# how can I access a DataSet on Form1 from Form2?
Thanks
__________________
|
|
|
|
|
by making sure the member in Form1 has a public visibility.
|
|
|
|
|
I need help with the string.Format method. If someone could provide a link that offers a comprehensive explanation of all the formatting options (especially for numbers) I'd really appreciate it. In the mean time, here's I need the equivalent of this MFC code:
CString str;
int i = 6;
char c = 'a';
str.Format("%02d", i);
str.Format("%d", i);
str.Format("%02d%c", i, c);
str.Format("%4d", i);
str.Format("%-2d", i);
Thanks in advance!
Alvaro
When birds fly in the right formation, they need only exert half the effort. Even in nature, teamwork results in collective laziness. -- despair.com
|
|
|
|
|
int i = 6;
char c = 'a';
MessageBox.Show( String.Format("{0,2:00}",i) );
MessageBox.Show( String.Format("{0}",i) );
MessageBox.Show( String.Format("{0,2:00}{1,1}",i,c) );
MessageBox.Show( String.Format("{0,4}",i) );
MessageBox.Show( String.Format("{0,-2}",i) );
reference help[^].
|
|
|
|
|
Thanks .S.Rod!
I actually found this[^] nice link which fully explains this stuff in one page -- much better than MSDN.
I have a question on the first version, where you use {0,2:00} . In your opinion is that better than {0:D2} ?
Thanks again,
Alvaro
When birds fly in the right formation, they need only exert half the effort. Even in nature, teamwork results in collective laziness. -- despair.com
|
|
|
|
|
Alvaro Mendez wrote:
I have a question on the first version, where you use {0,2:00}. In your opinion is that better than {0:D2}?
Using {0:D2} to get 2 zero-padding on the left is just not the right semantics for the grammar. No one should use it.
I wouldn't use {0:D2} since the number just after the D is supposed to represent the amount of digits after the decimal, for instance {0:f3} to format floating numbers with 3 fraction decimals.
Since we are dealing with D, i.e. integers, this number is meaningless but MS choosed to implement it anyway.
|
|
|
|
|
.S.Rod. wrote:
Since we are dealing with D, i.e. integers, this number is meaningless but MS choosed to implement it anyway.
Incredible, so they gave the number after the D a totally different meaning since whole numbers don't have fractional parts anyway.
Thanks for the insight.
Alvaro
When birds fly in the right formation, they need only exert half the effort. Even in nature, teamwork results in collective laziness. -- despair.com
|
|
|
|
|
Recently jumped into .net bandwagon from VC++.
I have a few questions and I will be glad if you clarify them.
1. How to build a DLL in C#? The options I got are "Windows Application, ASP.NET Web Service, ASP.NET Web Application and Console Application"
2. What's the equivalent of friend (C++) in C#?
Don't and drive.
|
|
|
|
|
Kant wrote:
1. How to build a DLL in C#? The options I got are "Windows Application, ASP.NET Web Service, ASP.NET Web Application and Console Application"
Duah...I got standard version of C#.
Visual C# Standard Edition Features[^]
Kant wrote:
2. What's the equivalent of friend (C++) in C#?
Got it from here.[^]
Don't and drive.
|
|
|
|
|
Hi Kant,
Welcome to the C# from C++ boat!
I don't know the answer to the first question, but I'm pretty confident I can answer the second one.
The answer is: there isn't an equivalent.
The best way to work around it is qualifying those members which you want to make accessible as internal . This basically makes them public to any classes within the same assembly.
Regards,
Alvaro
When birds fly in the right formation, they need only exert half the effort. Even in nature, teamwork results in collective laziness. -- despair.com
|
|
|
|
|
HISTORY: I'm trying to get the javascript in a page to execute a method in my FAT client. I implemented the DLL from the article here on implementing IDocHostUIHandler. I implemented my own interface. I know IDocHostUIHandler is properly hooked because I am stopping the context menues from displaying.
I was given a quick hint to look at window.getexternal so that window.external does not error with a null object error. BUT now I am getting a null object on window.getexternal. AAAArrrrggghhh. So can anyone tell me where I'm screwing up???? Here are my code pieces:
my html test:
<br />
<HTML><br />
<HEAD><br />
<Title> Test of hooking into IDocHostUIHandler </Title><br />
<script language="JavaScript" id="clientEventHandlersJS"><br />
<!--<br />
function callHostUI(sectionName)<br />
{<br />
window.getexternal.ClickEventHandler();<br />
window.external.ClickEventHandler(sectionName);<br />
}<br />
--><br />
</script><br />
</HEAD><br />
<body><br />
<INPUT id="btnExit" onclick='callHostUI("The test finally worked")' style="Z-INDEX: 102; LEFT: 15px; <br />
WIDTH: 108px; COLOR: white; BORDER-TOP-STYLE: none; FONT-STYLE: normal; <br />
FONT-FAMILY: 'Book Antiqua'; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: <br />
none; POSITION: absolute; TOP: 227px; HEIGHT: 40px; BACKGROUND-COLOR: navy; <br />
BORDER-BOTTOM-STYLE: none" type="button" value="Test GetExternal"><br />
</body><br />
</HTML><br />
my interface implementation:
<br />
interface IPageClickHandler<br />
{<br />
void ClickEventHandler(string SectionName);<br />
}<br />
<br />
namespace myProgramNamespace<br />
{<br />
public class pageEditor : System.Windows.Forms.Form, IPageClickHandler, IDocHostUIHandler<br />
my IDocHostUIHandler implementation:
<br />
InitializeComponent();<br />
holdPageName = pageName;<br />
object flags = 0;<br />
object targetFrame = String.Empty;<br />
object postData = String.Empty;<br />
object headers = String.Empty;<br />
this.showWebPage.Navigate("about:blank", ref flags, ref targetFrame, ref postData, ref headers);<br />
ICustomDoc cDoc = (ICustomDoc)this.showWebPage.Document;<br />
cDoc.SetUIHandler((IDocHostUIHandler)this);<br />
this.showWebPage.Navigate(@"D:\TestHTMLData\TestConversation.html", ref flags, ref targetFrame, ref postData, ref headers);<br />
and my getexternal implementation
<br />
void IDocHostUIHandler.GetExternal([MarshalAs(UnmanagedType.IDispatch)] out object ppDispatch)<br />
{<br />
ppDispatch= (IPageClickHandler)this;<br />
throw new COMException("", S_OK);<br />
}<br />
No matter what I try, I keep getting window.getexternal is a null object! If I try window.GetExternal I get an error that the method does not exist, so my method call must be somewhat correct. I've tried the call as
window.getexternal.mymethod()
and I tried it as
window.getexternal.myinterface()
both return a null object error.
So what the heck am I doing wrong????? I cannot figure it out!
Thanks for ANY help,
MJ
_____________________________________________
The world is a dangerous place. Not because of those that do evil, but because of those who look on and do nothing.
|
|
|
|
|
theRealCondor wrote:
window.getexternal.mymethod()
window.getexternal.myinterface()
...
I see nothing wrong in the fact it does not work. Indeed, window.getexternal does not even exist in the javascript object model. You've got to stick with window.external. If you intend to add callable methods, then they'll be called like this : window.external.mymethod(...)
theRealCondor wrote:
I know IDocHostUIHandler is properly hooked because I am stopping the context menues from displaying.
Not sure. You are passing something thanks to the .SetUIHandler(...) method call, but may be you are passing null, an abstract interface, a class which doesn't implement idispatch methods, or even a class with a wrong layout.
The IDocHostUIHandler technique using C# must be paid special attention. That's why, again, the reference article on Cp should be your starting point. Additionally, here[^] are useful entry points.
|
|
|
|
|
.S.Rod. wrote:
That's why, again, the reference article on Cp should be your starting point.
Well -- AGAIN I did start with all of the articles here on CP. I also followed several discussion threads. Nowhere on this site has anyone posted anything that does this in a full working discussion. All of the discussions go up to a point, a promise to post a sample project, then NOTHING. A dead discussion. And it was a post here on CP that said to look at doing GetExternal, and it was here that it looked like he was suggesting I do a window.getexternal.
I implemented IDocHostUIHandler following the article that was written by Nikhil Dabas and I deployee the MsHstHtmInterop.Dll component from his article. And, as shown in my code I included in my post, when I
<br />
throw new ComException("", S_False);<br />
I see the context menues. And when I
<br />
throw new ComException("", S_OK);<br />
I do not see the context menues.
Now having said that, executing JUST window.external produces these lustrous results:
'window.external' is null or not an object
I have also searched HUNDREDS of results form Google. Lots of talk about simple hooks and hundreds of posts about stopping the context menu. NOTHING is there about having javascript hit a method in my WinForm.
Now if you have any helpful comments that I can actually act on, I'd be greatful to hear them.
_____________________________________________
The world is a dangerous place. Not because of those that do evil, but because of those who look on and do nothing.
|
|
|
|
|
theRealCondor wrote:
I have also searched HUNDREDS of results form Google. Lots of talk about simple hooks and hundreds of posts about stopping the context menu. NOTHING is there about having javascript hit a method in my WinForm.
It's useless to search hundreds of posts if you don't know what you are looking for.
Here is how it works :
- anyone willing to implement custom menus or external method calls should register a custom site handler. That's what is done with the ICustomDoc.SetUIHandler(object) method call.
- the passed object reference has to implement the IDocHostUIHandler interface, an IUnknown based interface. Among the methods are one which is used as an entry point for all window.external.mymethod() calls, that's GetExternal(out object ppDispatch) .
- the GetExternal method should return a reference to an object which implements a dispatch interface. In case you don't know, a dispatch interface is a standard automation interface providing the ability to have methods called by their names, thanks to two helper methods : GetIdOfName() and Invoke() .
- the good news is that the .NET CLR provides helper attribute, namely [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)], which implements all the underlying plumbing. What's left to do is to declare and implement the actual methods.
- in the end, we have a sample html file, which reacts on clicks by calling javascript's window.external.MyMethod() . In order for this to work, the afore mentioned object must declare and implement the MyMethod() method.
Here is how to declare the IDispatch interface :
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IMyInterface
{
void MyMethod();
}
Here is how to implement it :
public class IMyInterfaceImpl : IMyInterface
{
public void MyMethod()
{
MessageBox.Show("my method");
}
}
Here is how to attach this interface to IDocHostUIHandler :
void IDocHostUIHandler.GetExternal(out object ppDispatch)
{
ppDispatch = new IMyInterfaceImpl();
}
Finally, here is a sample html code for a demo :
<html>
<body>
<script language="javascript">
function myclick()
{
window.external.MyMethod();
}
</script>
<p>Nothing in particular here.</p>
<a href="javascript:myclick()">click</a>
</body>
</html>
|
|
|
|
|
Thank you very much. With a clear description of what was going on, I got the implementation straightened out....and it works. So my implementation of IDocHostUIHandler seems to be fine -- it was just how I was told to implement the method to be executed.
You have ended a horrendous two-week hunt through a large number of articles and websites.
Thank you VERY much.
MJ
_____________________________________________
The world is a dangerous place. Not because of those that do evil, but because of those who look on and do nothing.
|
|
|
|
|
theRealCondor wrote:
You have ended a horrendous two-week hunt through a large number of articles and websites
<sadistical>It took me a couple of minutes to bring the implementation up (from that now famous starting point article in CodeProject)</sadistical>
[edit]Glad it works now, especially if you were doing real work. May be it's good to either post an article (only to remember those two passionate weeks from start to end, could be interesting discovery perspective), or add a comment in Niki's article.[/edit]
|
|
|
|
|
Actually, I am beginning to put together an article as well as a sample application. I have had no raw COM development experience -- this was the first time for me. So it has taken me longer to understand all this stuff.
Now here is one more question to you!
I have a need for the exposed method to populate a property sheet in my fat client. Much more complex than a stand-alone class that throws a message box. I built the sample app to do this:
It has rows of buttons corresponding to product pictures.
Click on the button and it calls my client. The client populates the form.
The example is a fun, twinky deployment to test my more difficult property object setting.
So instead of defining a separate class implementation of my interface
ppDispatch = new ClassInstance();
I am doing an implementation in my code.
ppDispatch = this;
So I have my interface:
<br />
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]<br />
public interface IPopulateWindow<br />
{<br />
void PopulateWindow(string item);<br />
}<br />
and I'm setting ICustomDoc.SetUIHandler in my constructor logic and inside my code I have the interface implemented:
<br />
void IPopulateWindow.PopulateWindow(string itemSelected)<br />
{<br />
switch (itemSelected)<br />
{<br />
<snip> populate form based on value of selected item </snip><br />
}<br />
this.Invalidate();<br />
throw new COMException("", 0);<br />
}<br />
Now --- I am getting the window.external object populated. That is good.
But --- IDispatch is not exposing the PopulateWindow method.
(Object does not support this property or method)
Is there something else I have to implement in my form class to have IDispatch properly see my method? Do I have to mark my implemenation as
[ComVisible(true)]
for instance?
_____________________________________________
The world is a dangerous place. Not because of those that do evil, but because of those who look on and do nothing.
|
|
|
|
|
Ach, never mind.
I finally got it working by continueing with the object as a unique class and passed reference to the form via contructor logic. That worked. So....
I have the interface definition in my namespace.
I have my implementation defined in my namespace with its' own constructor logic. I save a reference to my namespace.form object. Then when I take control of the UI, I pass the object along with a pointer at my form.
Works great!!!
Look for the sample app soon.....and I will make sure of noting your assistance in this work as well!!!
Later,
Michael
_____________________________________________
The world is a dangerous place. Not because of those that do evil, but because of those who look on and do nothing.
|
|
|
|
|
I used this piece of code to gain binary representation of a
float number...
byte* p;
float f = 11.0F;
p = (byte*)(&f);
Console.WriteLine("First Byte: " + *p++);
Console.WriteLine("Second Byte: " + *p++);
Console.WriteLine("Third Byte: " + *p++);
Console.WriteLine("Fourth Byte: " + *p);
But as you know we can't use pointers for managed types. Does anyone know
a method to find the binary representation of objects?
|
|
|
|
|
Here are two ways to do it :
float f = 1.0F;
byte[] buffer = BitConverter.GetBytes(f);
int nSize = buffer.Length;
byte b = 0;
for (int i=0; i<nSize; i++)
b = buffer[i];
float f = 1.0F;
IntPtr p = Marshal.AllocHGlobal(Marshal.SizeOf(f));
Marshal.StructureToPtr(f, p, false);
|
|
|
|
|
Yesterday, I was trying to create a shell extension for adding items to the context menu inside windows explorer. The .NET SDK comes with a sample application for this, shellcmd, but when I use this extension and right-click on an explorer item (in this case Folder items), every program that's running will be frozen. Anyone has an idea why this is?
|
|
|
|
|