|
cant you use LoadLibrary(),freelibrary() ?
|
|
|
|
|
Well, to clarify my question more, I don't want to do a LoadLibrary within the application. What I want is that the application shouldn't know at all which DLL it is loading but there may be additional DLL or COM component in between which can decide which particular DLL to load and then load the DLL automatically.
Waiting for suggestions/ tips/ comments.
Thanks,
Divick
|
|
|
|
|
Does nobody has a solution for this or my question is too cryptic?
Any suggestions/ideas are welcome.
Thanks a ton,
Divick
|
|
|
|
|
The best way I know of to do this is
1) Define an interface that provides standard definitions of the DLL functions you need to call. Your application should only work with the interfaces - that way it does not need to know anything about how the interface functions are actually implemented.
2) Create a wrapper class for each DLL that actually implements the interface function calls you defined in step 1.
3) Create the code needed to instantiate the correct class you created in Step 2, depending on which DLL you want to use. Usually you create an Abstract Factory pattern to accomplish this, but if your cases are simple enough, you may just use a function with a Select Case construction.
COM allows instantiated by the CreateObject(ComponentName.ClassName) method, so if done properly, you can completely decouple the main application from both the intermediate wrapper DLLs as well as the DLL you want to load dynamically, so you no longer have a linking conflict.
|
|
|
|
|
Did anyone tried event handling on activex controls from Grid present on property sheet provided by MFC ActiveX control wizard.
If yes can anyone let me how can this be done
-- modified at 5:26 Friday 30th September, 2005
|
|
|
|
|
Hi everybody,
I use a ITypeLib object and a ITypeInfo objects to get the method parameter types by the mean of GetFuncDesc. But how can I get the parameter name?
Thanx for reading my post,
BR
|
|
|
|
|
Hello mpuerto,
Use the ITypeInfo::GetNames() method. E.g. :
typedef std::vector<BSTR> BSTR_VECTOR;
...
...
...
BSTR_VECTOR vecFunctionParameters;
pITypeInfo -> GetFuncDesc
(
(unsigned int)function_id,
(FUNCDESC FAR* FAR*)&pFUNCDESC
);
// Resize the vector of BSTRs to hold "cParams + 1" number
// of parameters. We plus 1 because GetNames() will return
// to us the name of the method itself as the first returned
// name.
vecFunctionParameters.resize(pFUNCDESC->cParams + 1);
pITypeInfo -> GetNames
(
(MEMBERID)(pFUNCDESC->memid),
(BSTR FAR*)&(vecFunctionParameters[0]),
(unsigned int)(pFUNCDESC->cParams + 1),
(unsigned int FAR*)&cNames
);
BSTR_VECTOR::iterator theIterator;
DWORD dwParamIndex = 0;
for
(
theIterator = (vecFunctionParameters.begin() + 1), dwParamIndex = 0;
theIterator != vecFunctionParameters.end();
theIterator++, dwParamIndex++
)
{
BSTR bstrTemp = (BSTR)(*theIterator);
_bstr_t _bstTemp(bstrTemp, true);
TYPEDESC td = ((pFUNCDESC->lprgelemdescParam) + dwParamIndex)->tdesc;
std::cout << (LPCTSTR)_bstTemp << " " << td.vt << std::endl;
::SysFreeString(bstrTemp);
bstrTemp = NULL;
}
Give it a try, mpuerto.
Best Regards,
Bio.
|
|
|
|
|
Thank you very much for your help!!
That's what I needed. You've got a 5 from me. You have saved my life.
Thanks also to everybody who at least read my post.
BR,
mpuerto
|
|
|
|
|
hi there,
i got a problem when switching my apartment modell from single-threaded to multi-threaded (using c#).
i make use of the DragDropHelper interface, which (as far as i know) has to be initialized via "CoCreateInstance" as "CLSCTX.INPROC_SERVER"; however, when i switch to MTAThread for a multithreaded department, the instantiation fails saying something like "interface not supported" (or "class not registered" as i played around with the CLSCTX-parameter).
the thing is, i make extensive use of COM-interfaces as i write some kind of explorer-replacement; as doing so some functions are really slow (like icon extraction on tons of files ), i decided to switch to the multithreaded-department; however, some COM-interfaces aren't supported there (e.g. IShellIcon) when trying to instanciate in a STAThread department but trying to use in a seperate thread...
my opinion was, switching to MTAThread-department would let me allow to use COM in seperate threads, however, DragDropHelper-instanciation fails although doing in the main thread of the process.
Any ideas, did i miss something?
regards,
tajbender
|
|
|
|
|
I'm building an MFC app to view tv guide information; just for fun. In
this app I need a grid-like control. I have experimented with MSFlexGrid
and don't really care for it. I have ideas to create my own control with
variable length cells on a row (array style v. columns) and I would like
to add some fancy gradiant shading, images, hovertext, and some other
things.
Anyway, I wanted to implement the grid as an ActiveX control but am having
trouble getting CScrollBar to work. I have written ActiveX controls before
which had CDialog based popups. In this case I'm thinking CScrollView might
be better since I don't want a popup. I actually have most of it written
simply using CBrush, CFont, and CRect in the OnDraw event. If I could just
get a CScrollBar to show up and send event messages I'd be on my way.
I'd like this to be as lightweight as possible. It appears that using
CScrollView would require an SDI/MDI class and I'm not really sure how to
add this to an ActiveX control or if I event want to. If it's not a
lightweight control I'd almost rather just build this into my main
project.
So I'm looking for design advice and/or links to web pages demonstrating
adding MFC common controls to an ActiveX ocx and mapping the messages. I
found HOWTO: Add Tooltips to ActiveX controls in the MSDN library which
I am going to try but its not really what I want.
Thanks.
dwh
|
|
|
|
|
There is an article on codeguru (http://www.codeguru.com/Cpp/misc/misc/article.php/c6093/[^]) about using active scripting with MFC or ATL/WTL application. The code library instruments connection points between VBScript and host application so one can call C/C++ functions from VBScript and share the variables between the two. The implementation is reasonable except one issue, It suffer from an “Interface Leak”. One can see the leak running the sample program with the article in debug mode.
It seems the AddRef()/Release() are not balanced in the code. I was curios to see where the bug was. Tracing the interface code, it seems that “QueryInterface()” is seemingly adding implicit reference on the interface.
I fixed the problem by inserting an extra Release() on pIDisp on line 308 in file “ScriptHost.cpp” after the AddRef(). It seemingly solves the problem with no more interface leaks.
The fix above is for function residing in the application, the same fix on couple of lines above solves the shared variable issue too.
I am curious to get some input from COM gurus why a call to QueryInterface() is adding an extra reference on the interface.
|
|
|
|
|
mango_lier wrote:
I am curious to get some input from COM gurus why a call to QueryInterface() is adding an extra reference on the interface.
The COM rules says explicitly that a successful QueryInterface shall increase the reference count. This must be the case if you think about it. You are getting a reference to a new interface handle. It must be AddRef()'d because of situations like these:
IUnknown* pUnk = ...;
IMyInterface* pItf;
pUnk->QueryInterface(__uuidof(IMyInterface), (void**)&pItf);
pUnk->Release();
pItf->MyMethod(); If QueryInterface didn't AddRef(), then the code above would be invalid.
The COM rules assures that client code does not need to be complex.
Good music: In my rosary[^]
-- modified at 5:20 Sunday 25th September, 2005
|
|
|
|
|
Give me an Example of Custom marshelling in COM.
Bhargava Alanka
|
|
|
|
|
Hi every one !
Dear i m doing a project that i want to transfer text,audio,video data between two web application.if any one can help me in this regard i will be very thankfull to you.
Ok bye
waiting
irshad
hello join me and give me some useful information
allah hafiz
irshad
|
|
|
|
|
I need IPhelper API for one of my application ..... but MSVC installed on my system doesnt have this file or IpHelper.h .....
and quite rightly when i compile the program, it gives error
fatal error C1083: Cannot open include file: 'Iphlpapi.h': No such file or directory
I searched in my MSVC and didnt find it there..... so tell me how can i get it ...
Best regards
Mukhan
|
|
|
|
|
hi,
I am new to this , what does does this COM stands for
Can anyone send me some help regarding this
regds
Amit
|
|
|
|
|
In a nutshell ...
Component Object Model.
COM is a set of specifications and services designed to allow the following:
Modular code components can be written in any COM language and called from any other COM language. Example, a COM component created in C++ can be used by VB and in some case edven VBScript.
COM components can be changed within certain specs and swapped out without recompiling the application that uses them. So you can fix or upgrade functionality in a COM object ,and install the upgrade without having to change the application itself.
COM supports distributed applications - in other words an application can use a COM component but the actual location is transparent to the application. So an application that uses a COM component does not know and does not care if the component is in the same folder, in a different folder, or on a completely different machine in a network.
|
|
|
|
|
Hi rwestgraham,
thanks a million.
Can u plz mail me some links to this or some sort of literature abt this.
Waiting for a reply
regds
Amit
|
|
|
|
|
I really don't have any good links for beginning COM.
Everything I know about COM I learned from various books I bought, mainly:
"Beginning ATL 3 COM Programming" by Wrox Press
"Advanced VB6" by Matthew Curland
maybe a few other sources, and the forums like this and mostly just struggling with it a lot.
|
|
|
|
|
My first foray in COM and active scripting. When I run my app, I get the following message in the Debug windows
"INTERFACE LEAK: Ref Count = 1, MaxRefCount = 3, {Allocation =6} MyFunction - IDispatch"
It looks like the ATL debug trace is trying to tell me something but what is it and where should I start.
Thanks
|
|
|
|
|
Your calls of AddRef() and Release() on a COM-Interface are not balanced.
|
|
|
|
|
Thanks for the information, that is what I was suspecting, after going through some COM documentation. I guess the traces in the debug window are trying to tell me the count of AddRef and Release with ">" "<" count.
|
|
|
|
|
Hi all
I want to use IImnAccountManager Interface for outlook express accounts management.
It requires "imnact.h" header file, I searched into my system this file is not present there also I searched to net but didn't get any important information related to this file.
So please tell me that where can I hget this file from?
Please help me.
Thanks.
|
|
|
|
|
I had a component which has automation support and i am calling the component from the HTML page which contains VBSCRIPT. Every thing is working fine. but i am not able to debug the Component. i tried with inetinfo.exe and dllhost.exe.
Kindly help me what is the process i need to attach for debugging this component and generally how can i know what is the process i need to attach for debugging the DLL's
subbarao.
|
|
|
|
|