|
Where can I found a good tutorial for "Creating a ActiveX component" with Visual C++ ?
Daniel
---------------------------
Never change a running system!
|
|
|
|
|
What is you email?I'll send you one.
Mazy
"If I go crazy then will you still
Call me Superman
If I’m alive and well, will you be
There holding my hand
I’ll keep you by my side with
My superhuman might
Kryptonite"Kryptonite-3 Doors Down
|
|
|
|
|
Hi,
I'm trying to find a way for an out-of-process (C++) COM server (built w/o MFC support) to control the client application's cursor (shape).
Up to this point, I've tried several different variations of LoadCursor/SetCursor; e.g.:
HCURSOR NewCursor = LoadCursor(0, IDC_WAIT);
HCURSOR OldCursor = SetCursor(NewCursor);
I've also tried to retrieve a handle to the client's window and modify the app window class' properties (for the cursor) ; e.g.:
HCURSOR NewCursor = LoadCursor(0, IDC_WAIT);
HWND hwnd = GetActiveWindow(); // returned a NULL value
DWORD OldCursor = SetClassLong(hwnd, GCL_HCURSOR, (LONG)NewCursor);
In all cases, the application builds but does not modify the cursor. I think the primary problem I'm dealing w/ here is the fact that the COM server is out-of-process.
Any suggestions?
Thanks,
Steve
|
|
|
|
|
I have a DCOM executable which is a server program written in C++. The client is a VB program which calls the methods from DCOM. When the first client makes the call to DCOM, the DCOM executable is started on the server side and its initial memory size is 20,000K. The memory keeps growing when ever any client calls a DCOM method. In C++ code, I call QueryInterface(...), AddRef() and I release pointer to Interface by calling Release(..), but the memory still keeps growing for every call to DCOM method.
Why is this?
When each client disconnect from DCOM server, the memory on server side is not release, but only when the last client disconnects, the DCOM executable is stopped which is fine.
How can I keep the memory on server side not grow when clients are making calls to DCOM interface?
|
|
|
|
|
Im having a problem with my COM object. The IDL file below describes my interface.
In VB when I do a CreateObject, i get a type mismatch. When I try and declare a type "vbtopicstruct", i get an automation error 440? ANy help?
<br />
import "oaidl.idl";<br />
import "ocidl.idl";<br />
import "unknwn.idl";<br />
<br />
typedef<br />
[<br />
uuid(C21871A0-33EB-11D4-A13A-BE2573A1120F),<br />
helpstring("Topic Structure Definition")<br />
]<br />
struct vbTopicStruct<br />
{<br />
long a;<br />
long b;<br />
long c;<br />
} vbTopicStruct;<br />
<br />
[<br />
object,<br />
uuid(3C6C8D49-E7B3-4799-9EF6-37825D43064A),<br />
helpstring("IConvertTopic Interface Definition")<br />
]<br />
interface IConvertTopic : IUnknown<br />
{<br />
HRESULT ReadTopicsFromFile([in] BSTR filename, [in, out]vbTopicStruct *topics);<br />
HRESULT WriteTopicsToFile ([in] BSTR filename, [in, out]vbTopicStruct *topics);<br />
};<br />
<br />
[<br />
uuid(3C6C8D4B-E7B3-4799-9EF6-37825D43064A),<br />
helpstring("Topic Conversion Interface Definition Library")<br />
]<br />
library ConvertTopicDefinitionLibrary<br />
{<br />
importlib ("stdole32.tlb");<br />
importlib ("stdole2.tlb");<br />
<br />
struct vbTopicStruct;<br />
interface IConvertTopic;<br />
}<br />
Ryan Baillargeon
Software Specialist
|
|
|
|
|
The IDL doesn't include a CoClass, is this because either your IDL or resultant TLB is included/imported into another IDL file?
Steve S
[This signature space available for rent]
|
|
|
|
|
Hi.
Two weeks ago I posted a similar message about recommended advanced C++ books. An overwhelming number of responses mentioned Scott Meyers' Effective series including STL, Modern C++ Design: Generic Programming and Design Patterns Applied
by Andrei Alexandrescu, and Design Patterns.
I decided on Scott Meyer's Effective STL and Modern C++ Design: Generic Programming and Design Patterns Applied
by Andrei Alexandrescu. I definitely agree those books are exceptional in terns of advanced techniques and design patterns. I learned more from those books have from all previous C++ books I owned.
Now I am ready to move ahead and learn more specific software design, COM. I believe COM should be the next concept to look into because as windows applications become more integrated, COM will be even more popular and useful in the future.
I have heard about ATL and know that ATL is to COM and MFC is to Win32 API. Nonetheless, I do not know how ATL relates to C++.
What do you recommend as the best book on COM concept and implementation using C++?
Thanks,
Kuphryn
|
|
|
|
|
Essential COM by DON BOX is a good Book
Mad Coding.
|
|
|
|
|
"Inside COM". MS Press, Dale rodgerson.
How low can you go ? (MS retrofuck)
|
|
|
|
|
Okay. Thanks.
Davros posted an interesting reponse about COM and its future at cprogramming.
http://cboard.cprogramming.com/show...&threadid=26804
Kuphryn
|
|
|
|
|
In my original message, I did not include a question on
the order at which to learn and even become proficient
with COM design and implementation using C++.
What is the order in terms of books to study for learning
and become proficient with COM design and implementating
using C++? In other words, do you learn ATL first, or COM?
Kuphryn
|
|
|
|
|
Definitely COM concepts first. Then you could attempt an ATL and COM side by side though the better you know COM, the more you understand and appreciate and hate what ATL does.
|
|
|
|
|
Hi,
I am trying to access password and aliases or for that matter every thing related to microsoft exchange users i am able to retrieve only usernames using mapi.session object,
Please help in retrieving other things if any body has code plesae post it here.
I have tried using ADSI also.
Thanks,
Amit Gupta
|
|
|
|
|
You must be kidding. I would worry as a whole if you could retrieve the password !
What you can get instead is a SID (security descriptor) that reflects the user logged session. And that's enough to do practically anything else.
How low can you go ? (MS retrofuck)
|
|
|
|
|
Has had any experience with using IMoniker to open files stored in dll's or exe's using the res: protocol.
I have written code that uses CreateURLMoniker() and then IMoniker::BindToStorage() to open files and read their content via IStream. This works fine for file:, http:, ftp: protocols but fails when using the res: protocol which unfortunately is the protocol i am particularly interested in!
I don't understand how IE does it since i can use CreateURLMoniker() and then pass the moniker to ShowHTMLDialog() and IE is happy to read the file. If I step through the code then my IBindStatusCallback::OnProgress() gets called with BINDSTATUS_MIMETYPEAVAILABLE and after the MIME type string 'text/html' in the szStatusText parameter is the text of the file i want to load but i don't get a good IStream* back from IMoniker::BindToStorage().
My original code used URLOpenBlockingStream() which suffers from the same problem when accessing res: resources.
Please help!
|
|
|
|
|
I am not sure there is a moniker for the res:// protocole. Actually, CreateURLMoniker is for http://, ftp://, and a few other. I am almost sure that CreateURLMoniker does not work with file:// for instance.
How low can you go ? (MS retrofuck)
|
|
|
|
|
In my tests it works fine with the file: protocol. Thats the beauty of it, since an app can locate the resources it needs in a consistent way no matter where they are stored. Unfortunately the protocol handler for res: doesn't seem to work exactly like the others but it must be possible since you can create a IMoniker to a res: file and hand that to IE for it to load with no problems!
I know that i could create my own pluggable protocol handler and that would then allow me to get at my files in resources but that seems like a lot of work when there must be slight change that i can make to the way i deal with the IMoniker interface to take advantage of Microsofts res: implementation.
|
|
|
|
|
Alrighty, here's the setup.
Machine A has a local object server (.exe) called AFIT. Another application creates the AFIT object and registers it using RegisterActiveObject(). Another server is available to local and remote clients called AFITFinder, which provides one method that returns the results of GetActiveObject().
Machine B has a client that creates an AFITFinder on Machine A, and uses it to get an interface to the AFIT object from Machine A's ROT.
This all works fine.
Machine B can create an AFITFinder on Machine A no problem for the first 5 minutes (very repeatable) after AFIT has been created. If, on the other hand, I wait for 5 minutes or more, then the GetActiveObject() call fails on Machine A. That is, Machine B creates the AFITFinder on Machine A (successfully), calls GetAFIT() (marshalled successfully), but in GetAFIT(), the call to GetActiveObject() fails with 0x800401E3 (Operation Unavailable).
I've tried changing every security setting I can find. It just doesn't make sense that the same call becomes unavailable after leaving the connection idle for 5 minutes.
Have any of you ever heard of a timeout like this? Is there some security setting that time's itself out in a DCOM connection?
Is there some reason the ROT should drop my object after a certain period of time? It's registered as "strong" and definitely NOT being revoked in the meantime.
Any help would be greatly appreciated.
[edit]
I just tested it with a local client and it failed with the same problem. That is, Machine A created a local AFITFinder object and failed in the same spot.
[/edit]
J
|
|
|
|
|
What is your client written in? I know some languages (PowerBuilder for one) have a default timeout of 5 minutes on all ole objects.
Jason Henderson start page articles "If you are going through hell, keep going." - Sir Winston Churchill
|
|
|
|
|
Client(s) and server are all written in C++ (ATL).
What would enforce that timeout? Some boilerplate framework code? Or is it something in the underlying COM libraries?
J
|
|
|
|
|
I want to create event handler in WebBrowser (using MSHTML).
But I don't know how to set VARIANT.pdispVal to point to my event handler function.
/*************************************/
IHTMLElement::put_onclick(VARIANT v)
/*************************************/
/************** My code ***************/
IHTMLElement* pElement;
......
VARIANT var;
VariantInit(&var);
var.vt = VT_DISPATCH;
var.pdispVal = ????? <==== what I have to do ?
pElement->put_onclick(&var);
/*************************************/
What I have to do to make my handler function becomes IDispatch interface ?
|
|
|
|
|
You've got to pass an object interface supporting the following DISPID_HTMLELEMENTEVENTS_ONCLICK dispatch method id. Search MSDN with this keyword.
You've got to implement Invoke in this object, and especially provide implementation for the case dispid==DISPID_HTMLELEMENTEVENTS_ONCLICK.
She's so dirty, she threw a boomerang and it wouldn't even come back.
|
|
|
|
|
Is there a way to enumerate all client connections to a DCOM server? I'd like to be able to call a method on all instances of my class object.
Is it possible and if so, how??
Thanks
Jason Henderson start page articles "If you are going through hell, keep going." - Sir Winston Churchill
|
|
|
|
|
I think the only way to do this is to register the clients at the server object, i.e. store a reference to the clients (observer pattern).
|
|
|
|
|
Hi, I am having some problems with a pair of COM controls i have written. Each control starts up threads to deal with a serial port and fires events back to the container app on certain data recieved.
I want to be able to deal with the situation where the container is shut down with out calling my clean up methods.
If I have only one control running every thing seems fine and the code cleans up
if i run both controls (seperate serial ports no common variables or code) then I can get in a situation where i signal my threads to stop and they never do. I call the "Emergency shut down" on a c++ deconstructor of the com control. The emergency shut down sets a flag that will cause the thread to abort and not fire the controls events but the thread gets NO runtime even with stupid sleeps() while i am waiting for it to return before destroying my com object (from a c++ sense).
I can only assume I have deadlocked the com control. If i let the deconstructor complete I either get a page fault due to my variables being now nonsense or I find I was in the middle of firing the com event and now the rest of that events code no longer exists either way page fault and the container goes down with any recorded data.
How can I
1) avoid this dead lock
2) detect the container/control is going down and have time to stop my threads close ports etc.
and why does having both controls running on a single container matter?
Thanks in advance
Robin,
|
|
|
|