OK, Ive run my head into this wall for too long. I need help.
I am developing an applicaiton in C# to present a user with a GUI to specify
a configurable list of machines that he wants to listen to the output of.
Specify a filename to shove all of the data (into Excel), and start the whole
thing going. I get that done no problem. The problem comes with the Data.
The data is coming from a different application, and I am not 100% sure of
what it will be written in, so COM says I is the way to get this working. I
provide the other applicaiton with an interface to my class(es) for storing
data, and when this other app uses COM to call my exposed methods, I will
take care of the rest. Easy as pie. Alas, life isnt so good. I think I am
messing up somewhere in the registration of the TLB, or in the C# (this is my
first serious C# app)
My application is contained in one *.cs file, and it handles most of the GUI
stuff, and internal data storage. In another file I have defined the classes
to hold this very important data, some enums to help turn the integers into
strings, and an interface that contains the methods I want to expose to the
outside APP. All of the classes (there are 4) all inherit the same interface
(and implement all 4 methods, though 3 of them are blank returns).
Everything compiles nicely into a nice executable (*.exe).
Now, I run REGASM on the executable file generating a *.tlb file as well as
telling me it registers the classes in the registry (and I can see them in
the OLE/COM object viewer). Everything is looking great.
I need to test to see if the COM works though, and I do not know when/where
the real app is, so I decide to write a simple (I hope) C++ application which
will get the interface I expose, and send the data over to me. This simple
C++ app I view as the client, and the GUI in C# as the server. I hope I am
not innaccurate in those terms.
What I hope to see happening is starting up the C# app, and start it
listening for data, then starting up my dummy client app, and sending data to
the C# application via the exposed COM interface.
However, I cannot instantiate the object or the pointer. I am getting
errors that the file does not exist or windows cannot find the file. this is
from the C++ debugger. I look at the COM/OLE object viewer, and I notice on
right-click there is an instantiate object option, which returns the same
error.
I have no idea what I am doing right, and what I am doing wrong.
Can someone point me to a simple article on how to porperly export 4 C#
classes sharing an interface to COM (the most recent book tells me all I need
to do is regasm to do this). And then how to consume those objects in C++.
here is an example of the class in C#:
public interface IFoo
{
Populate1(int, int, int);
Populate2(int);
Populate3(int, int, string);
Populate4(int, string);
}
public class MyClass1 : IFoo
{
//Properties, etc
Populate1();
Populate2();
Populate3();
Populate4();
}
Same as above for the other 3 classes.
Any ideas? I am currently poring over _.NET and COM the Complete
Interoperability Guide_ trying to find something... but failing to see it.
Thanks
Andrew S. Giles 2 1939
Andrew... Watch for word wrap. Never tried this. http://msdn.microsoft.com/library/de.../en-us/cpguide
/
html/cpconexposingnetframeworkcomponentstocom.asp
You are very brave to try this. Writing a COM dll in C++ and then
calling the
methods from C# may be easier and more familiar. I mean you _can_ call
class methods using PInvoke, but does anyone want to? http://www.dotnet247.com/247referenc.../15/78221.aspx
Regards,
Jeff Can someone point me to a simple article on how to porperly export 4 C#
classes sharing an interface to COM (the most recent book tells me all I
need
to do is regasm to do this). And then how to consume those objects in
C++<
*** Sent via Developersdex http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!
I am not exactly sure what you are driving at, but it sounds like you want
to expose a managed .exe to an unmanaged .exe through COM. I have been told
by Microsoft that this is not supported. I have gotten it to work, but there
are certain issues with interop that are misbehaving. I have an issue open
with Microsoft now to find out why. No one seems to want to answer this
question to my satisfaction.
The thing to do is to define the classes that you want to expose to COM in a
managed .dll. Then reference that from a managed executable that will
register a class factory for your creatable objects. You can then marshal
pointers to your object through the class factory. Use regasm to generate a
type library from your managed .dll and use the type library to access your
code from COM. You will also have to manually alter some registry entries to
indicate that your objects will be accessed through the .exe not the .dll.
There are a few tutorials on the web that are out there.
"Andrew S. Giles" <An**********@discussions.microsoft.com> wrote in message
news:65**********************************@microsof t.com... OK, Ive run my head into this wall for too long. I need help.
I am developing an applicaiton in C# to present a user with a GUI to
specify a configurable list of machines that he wants to listen to the output of. Specify a filename to shove all of the data (into Excel), and start the
whole thing going. I get that done no problem. The problem comes with the
Data. The data is coming from a different application, and I am not 100% sure of what it will be written in, so COM says I is the way to get this working.
I provide the other applicaiton with an interface to my class(es) for
storing data, and when this other app uses COM to call my exposed methods, I will take care of the rest. Easy as pie. Alas, life isnt so good. I think I
am messing up somewhere in the registration of the TLB, or in the C# (this is
my first serious C# app)
My application is contained in one *.cs file, and it handles most of the
GUI stuff, and internal data storage. In another file I have defined the
classes to hold this very important data, some enums to help turn the integers
into strings, and an interface that contains the methods I want to expose to
the outside APP. All of the classes (there are 4) all inherit the same
interface (and implement all 4 methods, though 3 of them are blank returns). Everything compiles nicely into a nice executable (*.exe).
Now, I run REGASM on the executable file generating a *.tlb file as well
as telling me it registers the classes in the registry (and I can see them in the OLE/COM object viewer). Everything is looking great.
I need to test to see if the COM works though, and I do not know
when/where the real app is, so I decide to write a simple (I hope) C++ application
which will get the interface I expose, and send the data over to me. This
simple C++ app I view as the client, and the GUI in C# as the server. I hope I
am not innaccurate in those terms.
What I hope to see happening is starting up the C# app, and start it listening for data, then starting up my dummy client app, and sending data
to the C# application via the exposed COM interface.
However, I cannot instantiate the object or the pointer. I am getting errors that the file does not exist or windows cannot find the file. this
is from the C++ debugger. I look at the COM/OLE object viewer, and I notice
on right-click there is an instantiate object option, which returns the same error.
I have no idea what I am doing right, and what I am doing wrong.
Can someone point me to a simple article on how to porperly export 4 C# classes sharing an interface to COM (the most recent book tells me all I
need to do is regasm to do this). And then how to consume those objects in
C++. here is an example of the class in C#:
public interface IFoo { Populate1(int, int, int); Populate2(int); Populate3(int, int, string); Populate4(int, string); }
public class MyClass1 : IFoo { //Properties, etc Populate1(); Populate2(); Populate3(); Populate4(); }
Same as above for the other 3 classes.
Any ideas? I am currently poring over _.NET and COM the Complete Interoperability Guide_ trying to find something... but failing to see it.
Thanks
Andrew S. Giles This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: Tank |
last post by:
I have had this post up here when i was trying to figure out how to
make leading zeros and have been able to fudge that to work. I am now
have trouble getting the loop that makes the folders to...
|
by: Timothy Shih |
last post by:
Hi, I am trying to figure out how to use unmanaged code using P/Invoke. I
wrote a simple function which takes in 2 buffers (one a byte buffer, one a
char buffer) and copies the contents of the byte...
|
by: dln |
last post by:
I'm having a rather weird problem when attempting to build my project that
maybe someone could help me out with. Basically, I have a workspace
containing two C# projects. The first project is a...
|
by: JM |
last post by:
Hi all,
Further to my mail yesterday, haven't received much help
and am getting slightly worried !
I am trying to add a block of cells but sadly can't get
excel VBA to exactly read my...
|
by: Sajid |
last post by:
Hello! Experts,
I have the following piece of code in VB.NET that I want to use to
update any records in the database. I would like to use a code as well
as DataGrid to update the records....
|
by: |
last post by:
I wrote a class in VB.NET to export the contents of a datagrid to Excel. It
works perfectly on my machine, but it fails on my customers' PCs that have
identical versions of Win XP (SP1) and Excel...
|
by: melanieab |
last post by:
Hi,
Sorry this is a long message, but I'm getting desperate (and worried). I
have a textbox (say, tb1) where the string is longer than the width of the
box. If I'm coming from the previous...
|
by: garyusenet |
last post by:
I have been trying to interface with my act database using .net and act
api's. I was originally using c# but it wouldn't connect to the
database. I tried VB in desperation and it is connecting!
...
|
by: Wiebe Tijsma |
last post by:
Hi,
I'm running a web application application using the
Microsoft.Interop.Security.AzRoles version 1.2.0.0 in the GAC.
After an upgrade to Vista, I also have a version 2.0.0.0 in the GAC.
I...
|
by: lllomh |
last post by:
Define the method first
this.state = {
buttonBackgroundColor: 'green',
isBlinking: false, // A new status is added to identify whether the button is blinking or not
}
autoStart=()=>{
|
by: DJRhino |
last post by:
Was curious if anyone else was having this same issue or not....
I was just Up/Down graded to windows 11 and now my access combo boxes are not acting right. With win 10 I could start typing...
|
by: isladogs |
last post by:
The next Access Europe meeting will be on Wednesday 4 Oct 2023 starting at 18:00 UK time (6PM UTC+1) and finishing at about 19:15 (7.15PM)
The start time is equivalent to 19:00 (7PM) in Central...
|
by: Aliciasmith |
last post by:
In an age dominated by smartphones, having a mobile app for your business is no longer an option; it's a necessity. Whether you're a startup or an established enterprise, finding the right mobile app...
|
by: tracyyun |
last post by:
Hello everyone,
I have a question and would like some advice on network connectivity. I have one computer connected to my router via WiFi, but I have two other computers that I want to be able to...
|
by: NeoPa |
last post by:
Introduction
For this article I'll be using a very simple database which has Form (clsForm) & Report (clsReport) classes that simply handle making the calling Form invisible until the Form, or all...
|
by: Teri B |
last post by:
Hi, I have created a sub-form Roles. In my course form the user selects the roles assigned to the course.
0ne-to-many. One course many roles.
Then I created a report based on the Course form and...
|
by: NeoPa |
last post by:
Introduction
For this article I'll be focusing on the Report (clsReport) class. This simply handles making the calling Form invisible until all of the Reports opened by it have been closed, when it...
|
by: isladogs |
last post by:
The next online meeting of the Access Europe User Group will be on Wednesday 6 Dec 2023 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM).
In this month's session, Mike...
| |