|
I should mention that when I test with other applications, i.e. MS Word, this doesn't happen so I don't believe I should blame the printer...
|
|
|
|
|
Hi!!
I've got a problem with remoting that I don't understand...
Could you explain me what happend with this code?? When I unregister the channel and try to get the object again, the code throws an exception...
tCreador = (Creador)Activator.GetObject(tType,"tcp://localhost:8082/Creador");
System.Runtime.Remoting.Channels.IChannel[] chns1 = ChannelServices.RegisteredChannels;
ChannelServices.UnregisterChannel(chns1[0]);
tCreador = (Creador)Activator.GetObject(tType,"tcp://localhost:8082/Creador");
Regards,
Iván.
Iván Fernández
|
|
|
|
|
If you unregistered channel, Client doesn't have means "to talk" to Server.
It's the same if would you tried to get reference to object without registering any channel.
You have to register channel again before the call of
Activator.GetObject .
"...hasn't really been well accepted ... as the ratings tell us so far " - Nishant S
|
|
|
|
|
I'm trying to make an activeX component in C#. From what I see in the article 'writting a COM object in c#', C# libraries are actually ActiveX objects !
But when I try to use them with the ActiveX Control Test Container, it simply fails to load them !
Geee !!!!!
Bad ! What is wrong here ?
and the regsrv32 does not want to register it, does not look like an activex to me !
Cheers, Pierre
|
|
|
|
|
mrpink wrote:
C# libraries are actually ActiveX objects
I don't think that's a correct statement, otherwise you will be able to see all the C# objects in the windows registry. But there could be a way to expose C# objects as COM objects.
|
|
|
|
|
|
This works fine !!!
Excellent, it is registered now ! The trick is that in the test container, it is hidden in a .Net section (so need to check a box to see it !)
Ok ! The problem is that it does not work then .. when added to the container : "Unspecified Idea" !!!!!
Do you have any idea how I can trap .. watch the error ?
Cheers,
Pierre.
|
|
|
|
|
There is no tool to help to do this using .NET, at least currently : we have tlbimp.exe, tlbexp.exe, aximp.exe. And guess what, we don't have axexp.exe.
Basically you need to export an object which exposes the common interfaces exposed by an ActiveX object, which are IOleObject, IOleControl, IDispatch just to name the few mandatory ones.
Exposing interfaces is not hard, tlbexp.exe does all the work.
But you have to create an object, which inherits those interfaces. At this point, if I was asked to do just that, I would try to derive the axhost class (winforms namespace), which is the base class used when it comes to instantiating ActiveX objects.
May be you are even better off writing everything from scratch.
To know what interfaces to implement, and to see the wonderful thing appear in the Control Test Container, I would recommend an old Fritz Onion article[^].
RSS feed
|
|
|
|
|
WAAARF !! This sounds awfully complex to me !!!
Thanks !
|
|
|
|
|
Sorry guy, here is how to do it :
http://www.codeproject.com/cs/miscctrl/exposingdotnetcontrols.asp
RSS feed
|
|
|
|
|
|
How can I create a form as a child window of another form?
|
|
|
|
|
Assuming your child form is called Form2, and this code is being called from another form:
Form2 form2 = new Form2();<br />
form2.Parent = this;
Or, if Form2 is to be displayed as a dialog box:
Form2 form2 = new Form2(this)<br />
|
|
|
|
|
Well, method 1 gives me:
An unhandled exception of type 'System.ArgumentException' occurred in system.windows.forms.dll
Additional information: Cannot add a top level control to a control.
And neither my own form nor the System.Windows.Forms.Form class has a (Form) constructor...
|
|
|
|
|
Set the new Form's TopLevel property to false before you make it Visible or Show() it.
|
|
|
|
|
Thanks! That worked.
However, the window is created with the WS_CHILD style, which makes it be "inside" the main window. This I do not want. How can I make it not use the WS_CHILD style, but still have the main window as its parent? I don't see any place to specify the window styles manually...
|
|
|
|
|
Hmm, also try
TopMost = true;
in addition to
TopLevel = false;
|
|
|
|
|
Hello,
I'm experiencing a problem with DataSets. If I use a DataSet as a parameter of a method in a Serviced Component, I always receive an InvalidCastException because something is trying to convert __ComObject to DataSet. When a method only returns a DataSet (no DataSet as parameter) there's no problem.
I'm running my application with framework 1.1, the serviced component is in Server mode.
Is this some bug in the .Net framework? Has anyone a solution or a workaround for this problem?
best regards,
Pieter
|
|
|
|
|
I don't know the answer but does the dataset serialize. You might have to implement the serializable interface. or just shoot it as an xml stream through. Com passes it as a stream anyhow.
I'm not an expert yet, but I play one at work. Yeah and here too.
|
|
|
|
|
Thanks for replying. I'm not sure if a dataset is serializable, I'll check it out.
Running the component in Library mode doesn't have this problem, although there's a problem with my database connection. But that's some security issue I think.
|
|
|
|
|
it might be easier to parse it as xml "WriteXML() method" then send it through
I'm not an expert yet, but I play one at work. Yeah and here too.
|
|
|
|
|
I think that the dataset-to-xml and xml-to-dataset coversion will cause a significant performance drop.
|
|
|
|
|
I ran into this problem working with C# based queued components.
Datasets are serializable, they support ISerializable however alot of things with COM+ (especially with Queued Components) is that they need the components to support IPersist.
They have no idea how to serialize using the ISerializable interface therefore you either go the route of dataset--> XML, XML--> dataset or implement IPersist within your component.
|
|
|
|
|
Jarrod,
Thanks, I'll take a look at how to implement the IPersist interface.
Pieter
|
|
|
|
|
Well its relatively fast and uses a buffered stream. I mean really when your marshalling your Dataset you serialize the object to text then back again. And its basically the same thing. WriteXML is the fastest firehose method of the class. But yeah it would be better to do a dataset. You might try createing an object, clone the dataset to that object then marshalling it over the boundary. That might work. Or use the serializable attribute above a custom class that inherits the dataset.
Personally, With DataSets I use reflection to populate classes then update them with COM+ life cycles. Much more elegant and easier to load balance. That and business rules on forms and behind the scenes are simple to implement.
nick
I'm not an expert yet, but I play one at work. Yeah and here too.
|
|
|
|