|
if i have a DLL (could be a COM DLL, could be a generic Windows DLL), is there a way to inspect it to see if it implements a specific IDispatch interface without registering the DLL and using CreateDispatch.
i imagine the process is something like:
LoadLibrary
GetProcAddress for QueryInterface
use QueryInterface to find .... (?)
i need this to test DLLs to see if they meet the requirements for our plugin interface without registering the DLL (to avoid cluttering the users' registry)
|
|
|
|
|
If the DLL has a type library, load it with LoadTypeLib[Ex] and iterate through it. I would suggest using the Ex-version of the function, as you can tell it explicitly not to register the library.
You will also have to dig out docs for the ITypeLibrary interface (and friends).
If you do not have access to a type library (not very likely, since it's a dispatch object), you'd have to create the component and QueryInterface().
--
Presented in doublevision (where drunk)
|
|
|
|
|
no, no type lib.
the problem is - the DLL can be any DLL at all. assume you've got a file named foo.DLL: no typelib, no other information - just a DLL file. you can't assume anything has called DLLRegisterServer on it, and you know have a CLSID for it. there is no CLSID, no registered interface, just a DLL file.
given that, is there a way to tell if it implements a given IDispatch interface ?
it's been so long since i've even looked at any of the low-level COM stuff... i'm not even sure what i need to do with QueryInterface... all the examples i've seen assume you have a CLSID.
ugh
|
|
|
|
|
But DLLs most often contain a type library. Are you sure it's "clean"? Sounds very odd... Load the DLL in OleView (tool which comes with VS.NET 2k3, 2k2 and VS6. Not sure about 2k5). If you can see the classes in it, you will be able to use LoadLibraryEx (that's what it does).
You could always do manual COM-plumbing to create instances of COM-classes contained within the DLL, but that's useless, as you need the CLSID...
--
Raaaaaaaaaaaaaaaaaaaaa!
|
|
|
|
|
Chris,
I believe CLSID would be required because it is possible that a single COM Inproc server can expose multiple components of which few would support IDispatch and few would support VTBL binding only.
Considering that only DLL is available to us you might not take TypeLib processing (COM servers can have the TLB shipped seperately and are not embeded in DLL resource), DllGetClassObject function can be used (after LoadLibrary)to get ClassFactory. You can use Class factory to intantiate an Object of that class passing IDispatch IID.
I believe you must also consider about single server supporting more than one components and hence more than one Class factories.
Sohail
modified 21-Apr-21 21:01pm.
|
|
|
|
|
Hey everybody.
i've just programmed an activex control using c++ and mfc. now i've got the problem that it doesn't show up in my html page. the weird thing is that i can load the page from my harddisk and everything is fine. However when loading from my server the activex area just displays a white box with a little x in the upper left corner.
more weird stuff to follow:
when i open my offline document and THEN browse to my online page the activex control DOES show up correctly. O_o
I've already debugged my ocx and can say the following:
When not showing up, the module is still loaded (CMyApp::InitInstance is called) it's not unloaded prematurely (CMyApp::ExitInstance is called upon closing explorer only) CMyCtrl::OnCreate is not called... what could it be? The control was successfully VeriSign'ed by the way
Any Help is very appreciated.
Thanks in advance,
Stephan Unverwerth
UPDATE:
The problem occurs even with a blank project from the MFC ActiveX Wizard!!!
-- modified at 9:20 Friday 31st August, 2007
|
|
|
|
|
Stephan - did you ever resolve this issue? Sounds like an activation issue.
Charlie Gilley
Will program for food...
|
|
|
|
|
hey guys,
I ma making an xpcom component to listen to event generated by Mozilla browser. It compiles fien ..but gives linker error .
MyComponent.obj : error LNK2001: unresolved external symbol "public: virtual unsigned int __stdcall WebLock::GetWeakReference(class nsIWeakReference * *)" (?GetWeakReference@WebLock@@UAGIPAPAVnsIWeakReference@@@Z)
1>.\Debug\MyComponent.dll : fatal error LNK1120: 1 unresolved externals
I am also pasting peace of code related to this error ..Please help me get out of this error.
I am linking against xpcomglue_s.lib ,xpcom.lib ,plc4.lib nspr4.lib and plds4,lib.
MyComponent.h
class WebLock : public nsIWebProgressListener,
public nsISupportsWeakReference,
public nsIObserver,
public iWeblock
{
public:
NS_DECL_ISUPPORTS
NS_DECL_NSIOBSERVER
NS_DELC_NSIWEBPROGRESSLISTENER
NS_DECL_NSISUPPORTSWEAKREFERENCE
...............
...............
};
MyComponent.cpp
NS_IMPL_ISUPPORTS4(WebLock, nsIWebProgressListener,
nsISupportsWeakReference,
nsIObserver,
iWeblock)
............
.............
Thanks a lot in Advance..
|
|
|
|
|
veer_in wrote: error LNK2001: unresolved external symbol "public: virtual unsigned int __stdcall WebLock::GetWeakReference(class nsIWeakReference * *)" (?GetWeakReference@WebLock@@UAGIPAPAVnsIWeakReference@@@Z)
Error indicates, Linker is not able to find definition of WebLock::GetWeakReference . If it is you class, then provide one, or link the lib having information in.
Prasad
MS MVP - VC++
|
|
|
|
|
Yeah,
It is using xpcomglue_s.lib ..I m already including this lib file.
So plz let me know if u have anyother idea..
Thanks.
|
|
|
|
|
veer_in wrote: So plz let me know if u have anyother idea..
Probaly, you can try forums, using these libs.
Prasad
MS MVP - VC++
|
|
|
|
|
Thanks u so much for your help
|
|
|
|
|
The following code fails and return "0x80004002" error Invalid Syntax.
Can any one provide me direction to solve this problem.
Is there any sample VC++ to get list domain in Primary Domain Controller, and to list the users in one domain
WCHAR szTest [100];
swprintf(szTest,L"%s","WinNT://development/ilanthendralr,user");
HRESULT hr = CoInitialize(NULL);
IADsUser *pUser;
hr = ADsGetObject(szTest,IID_IADsUser,(void**)&pUser);
if (FAILED(hr))
{return ;}
BSTR bstr;
hr = pUser->get_FullName(&bstr);
printf("User: %S\n", bstr);
SysFreeString(bstr);
CoUninitialize();
for thendral
|
|
|
|
|
Hi guys,
I am calling a managed dll build in 2.0 from a vb 6.0 application, the dll runs well under clr 2.0 but the vb application breaks.
I was previously using managed dll built with 1.1, and that was working fine. i have framework 1.1 and 2.0 installed with windows server 2003.
can u guys tell me what could be the problem??
Thank You.
Saswat
|
|
|
|
|
|
I have a problem with COM ( object is Internet Explorer )
I designed a form with Internet Explorer object. Everything seem OK but when I surf a website contain inline frame ( the inline frame's location is in other domain ), I met a problem. With the main page, I can do everthing with it such as view HTML source, list links ..etc.. but with the inline frame, I can't do anything with it ! All request return message "access denied".
Thought, the error came from something about security reason of IE ( may be cross domain ? ). I can't find a way to solve this problem. I tried to set some config on IE but nothing except "access denied" message return .
Anyone can help me ? Thanks lot !
p/s : I have admin privillige to run this program.
My English's so bad, butI hope you'll understand my question !
|
|
|
|
|
conchocon91 wrote: the inline frame's location is in other domain
That's the reason for the access-denied error. Allowing data to pass between different domains would lead to cross-site scripting[^] attacks.
|
|
|
|
|
Oh yeah ! I knew that but want to ask how to disable ( or bypass ) this security method.
Because I have full privillige and I know which website's safe to surf so I want to bypass this unvalue security method. Can you help me ?
I tried on Regmon to reconize which key contain enable/disable this security method but what a sad result !
|
|
|
|
|
Hi friends,
I've built a COM component using ATL.The component gets created succesfully,but i'm not able to see it in the registry(tried registering it manually useing regsvr32 and it said component registered successfully)..Any help will be highly appreciated.
Thanks and regards,
Rajeev
|
|
|
|
|
What code do you have in DLLRegisterServer function?
What is the content of your .RGS file?
Sohail
modified 21-Apr-21 21:01pm.
|
|
|
|
|
HKCR
{
MITFConverter.MIConverter.1 = s 'MIConverter Class'
{
CLSID = s '{8AED5835-214E-408E-BEAE-375A95F10433}'
}
MITFConverter.MIConverter = s 'MIConverter Class'
{
CLSID = s '{8AED5835-214E-408E-BEAE-375A95F10433}'
CurVer = s 'MITFConverter.MIConverter.1'
}
NoRemove CLSID
{
ForceRemove {8AED5835-214E-408E-BEAE-375A95F10433} = s 'MIConverter Class'
{
ProgID = s 'MITFConverter.MIConverter.1'
VersionIndependentProgID = s 'MITFConverter.MIConverter'
ForceRemove 'Programmable'
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Free'
}
val AppID = s '%APPID%'
'TypeLib' = s '{26B4997D-A0FD-4A5B-BB6D-A270D8FD86B3}'
}
}
}
this is the content of my rgs file
|
|
|
|
|
and what is the code in DllRegisterServer function?
Sohail
modified 21-Apr-21 21:01pm.
|
|
|
|
|
|
Got the answer -
objCOM = Activator.CreateInstance(Type.GetTypeFromCLSID(New Guid("{4B117F12-37D1-4C19-93C8-4B318594E2A3}")))
|
|
|
|
|
i used builder 6 and got the whole cppbrowser to work but now i want to save the html into a text file,how do i convert the IDispatch to string?
this is what the help tells me.but honestly i don't understand
"Use Document to access an IDispatch interface for manipulating the contents of the HTML document through the COM object model. If there is no active document, Document is NULL. That is, you must first load a document using the Navigate or Navigate2 method before you can manipulate it using the Document interface.
For more information about this interface, see the document object section of Microsoft’s Dynamic HTML reference."
|
|
|
|