|
Hi all,
I am new in C# World and working on C# project which uses reflection.
Problem:
I am calling a function from a DLL say ServerDLL (C#)which is loaded by an C# application say MyApp.
I want to invoke some funcition say (SomeFunction)of Class Class1 from another DLL say ClientDLL.
For this I am using following.
<br />
object MyObj = Marshal.GetActiveObject("ServerDLL.Class1")
object[] args = new object[1];<br />
args[0] = my_data_to_pass;
MyObj.GetType().InvokeMember("SomeFunction", BindingFlags.InvokeMethod, null, MyObj, args);<br />
This works fine, but I found these very expensive and taking too much time. Seems that MyObj.GetType() is loading everytime.
I have googled and come to know that these is heavy operation (see reference)
http://msdn.microsoft.com/msdnmag/issues/05/07/Reflection/[^]
I have changed the code to work to load it once,
<br />
<br />
MethodInfo g_MFinfo = MyObj.GetType().GetMethod("SomeFunction", BindingFlags.InvokeMethod);<br />
But I am getting null value g_MFinfo?
Does anyone know what i am doing wrong or probably a good approach?
Thanks in Advance
Abhi Lahare
|
|
|
|
|
Huge question
The point should be where you catch the Object Reference: may be MyObj isn't what you expect to. Try to verify which class you have referred to. Having a null result mean that signature cannot be detected in the class (you may have optionally an exception to be raised instead of null return using a BindingFlag if i'm not joked by my memory).
As long as MyObj is ServerDLL.Class1 your code should work, it seems to me. If you do not come to a point, please write a little demo for us to be tested against. I'm probably not able to come forth with a solution without playing a little with the child.
Sorry, it's all I can do
Parsiphal
|
|
|
|
|
Hi Parsiphal,
Thanks for reply. I am pointing to correct object if i am not wrong.Is there any method to check the validity of the Object.
I have tried simple check
<br />
if(MyObj is ServerDLL.Class1)<br />
System.Console.WriteLine("Success");<br />
else<br />
System.Console.WriteLine("Fail");<br />
Here it is giving me "Fail".
Am doing validating it correctly?
Regards
Abhi Lahare
|
|
|
|
|
Hi, sorry for get you answeret a bit late. I was heavily involved with a few thing here and there.
Having you defined MyObj as object, it's not surprising Type is Sustem.Object.
With that test we are also testing against any possible derived class instanced and handled by Object. So definitely we can say the object you are handling is not ServerDLL.Class1, and therefore the answer to your first question should be: "you get null because no such a method exist in the instance".
I asked you to write a little demo for me to play with, just to be sure of running same condition you have (even if no logic is to be included in the demo: just a Console.Writeline "Method xxx called" would work: i'm not interested in spying what you are doing ).
In my opinion, may be the instance you are handling is still Class1 type, but masquerade by the object declaration. Try to verify this with your IDE, putting a break point on the first line of your test, than putting MyObj under watch and drilling the tree (expanding '+') looking for some that can tell you: there's a Class1 under the cover; otherwise to estabilish which instance have you taken from memory.
I'm not sure what you are getting since I'm not aware of the complexity of your application.
If you can say either you handle or not a Class1 instance, you can say some on the first line of your snippet, that is: obtaining the instance.
From there you can see if it is a matter of member protection (public, private, protected), or some modifier than can prevent you from accessing that memeber.
If still is plumbing, consider to split you code-line to examine each step and its result.
If you are not able to have a MemberInfo Instance of the nethod you want to invoke, invocation will never be possibile: consider splitting the problem in prerequisite and action, so to say
I can show you a couple of way to instancing a class by reflection, but no other to obtaining a reference to an istance: I think either is correct and the problem is elsewhere, or it is not fully correct.
Hope this can help
P.S. Feel free to send me an example that can reproduce the behavior for me to play around with: I will give you some closer advice perhaps
Parsiphal
|
|
|
|
|
Is SomeFunction a public function? If not, you'll need to specify an additional BindingFlag, something like
MyObj.GetType().GetMethod("SomeFunction", BindingFlags.InvokeMethod | BindingFlags.NonPublic);
|
|
|
|
|
Hi Judah Himango
Thanks a lot for your reply. It is a private function I have added the BindingFlafs.NonPublic option. but no luck Its still giving null for call.
Regards
Abhi Lahare
|
|
|
|
|
Is it static or an instance method? You'll need to specify that in the binding flags there as well.
|
|
|
|
|
Thanks Judah,
Sorry for delay, my method is a simple private method.
Thanks
Abhishake Lahare
|
|
|
|
|
Then you'll need to specify that it is an instance method in the BindingFlags as well.
|
|
|
|
|
how to dispaly in compact framework WAIT ICON (sandglass)
|
|
|
|
|
Cursor.Current = Cursors.WaitCursor;
Cursor.Current = Cursors.Default;
|
|
|
|
|
That's what I am doing at the moment but it adds an extra step. I am quite happy for that to happen but I just thought it would be nice if it saved automatically in the directory it is destined for.
|
|
|
|
|
Hi all,
can someone help me out with a javascript that can disable or hide address bar on browsers on page_load.
I mean when I run my c# page and it loads succesfully, it shoudn't show the address bar.
|
|
|
|
|
acodman wrote: javascript that can disable or hide address bar on browsers on page_load.
See this[^] link.
Imho, you're better off asking this question in the Web Development[^] forum.
/ravi
|
|
|
|
|
Or even better not trying to control the users web browser - its their browser let them decide what they see!
|
|
|
|
|
CurrentCell.ColumnNumber and CurrentCell.RowNumber are read-only properties and can not be changed. So, how can any cell from grid be set as current cell (selected and focused).
thanks.
|
|
|
|
|
are you using Not net 2.0? if so have you tried the following?
this.dataGridView1.CurrentCell = this.dataGridView1[2, 0];
|
|
|
|
|
i'm using Net2.0 but this is not working
grid.CurrentCell = (DataGridCell)grid[3, 3];
InvalidCastException
the control is not DataGridView but DataGrid
|
|
|
|
|
Hi.
How can I read command line parameters used to call a Windows Form Application?
I use VS2005 to create a new Windows application. The autogenerated Program.cs fle looks like this:
....<br />
static class Program<br />
{ <br />
[STAThread]<br />
static void Main()<br />
{<br />
Application.EnableVisualStyles();<br />
Application.SetCompatibleTextRenderingDefault(false);<br />
Application.Run(new MainFrm());<br />
}<br />
}<br />
....
Shouldn't the Main method header include a parameter for arguments?
Can I add it by hand? Are there any other options?
Thanks.
|
|
|
|
|
feel free to add the arguments to Main function. This wil stil work with windows forms
eg. static void Main(string[] args)
|
|
|
|
|
You don't need to do that, you can just call:
string[] args = Environment.GetCommandLineArgs();
FYI, args[0] is the app file name.
|
|
|
|
|
|
I created a Report using CR in .NET. The report has a couple of decimal fields .I want the output to look like : $55,345.06. I formatted the the fields by right clicking it, selecting the Number Tab and selecting the "Custom Style" option. The sample output showed $55,555.56. But when I ran the report I am getting values like 3456.6700. I am not getting the Dollar prefix and the output is not rounded to 2 decimal places.
Am I missing something? Please let me know
rs
|
|
|
|
|
This is the tipical behavior in a situation like this:
- at design time, you have a number field, and you assign a number format to it.
- at run time, you have not a number value (e.g: it is a string value)
in such a case, format won't apply due to a internal exception handling, I suppose, you have not any signal.
Hope this help
Parsiphal
|
|
|
|
|
Thanks for the reply.
Not sure if I got it . I am new to Crystal Reports.
How do I take care of the exception handling and fix the problem
rs
|
|
|
|