|
I need to access a DLL's functions. When I view the DLL, using DLL Export Viewer - option, Scan COM type libraries, I can see the function that I'm looking after, but it is displayed as
_PastelPartnerSDK::ImportCustomer 1610809394 (0x60030032) PasSDK.dll F:\PastelDLL\PasSDK.dl COM Method
Now I can't seem to find examples for GetProcAddress and COM Methods...
Do I call GetProcAddress as follows?
GetProcAddress(hm, _T("ImportCustomer"));
or
GetProcAddress(hm, _T("_PastelPartnerSDK::ImportCustomer"));
(Where "hm" is the handle returned by LoadLibrary)
The same goes for the typedef void * (__stdcall *ImportCustomer)(); (Can I use any name (ImportCustomer used here) or does it need to be the same as in the DLL?)
Thank you.
|
|
|
|
|
You call GetProcAddress with the exported name. Use the depends.exe to get the right names. There are depending on the call directives.
And check every call of GetProcAddress for success!!!
Greetings from Germany
|
|
|
|
|
Hi
depends.exe doesn't give me all the COM methods
|
|
|
|
|
If you are using COM dlls you should access it via the COM-interfaces.
For sake and sanity
Greetings from Germany
|
|
|
|
|
How? (please point in the direction of a tutorial)
------------
Come to the Dark Side, we have cookies
|
|
|
|
|
At a glance: COM is easy if it works
At first create the object and than call the interfaces and functions.
Check EVERY call for the result and really think what to code on an error. That is important!!!
My favourite COM author is Jeff Glatt:
http://www.codeproject.com/script/Articles/MemberArticles.aspx?amid=88625[^]
www.codeproject.com/KB/COM/CCOMThread.aspx
www.codeproject.com/KB/COM/TEventHandler.aspx
Greetings from Germany
|
|
|
|
|
Thank you. I'll go and read up
------------
Come to the Dark Side, we have cookies
|
|
|
|
|
|
I looked shortly at the source code and think it should work. Download the source and debug it.
It is a good beginners sample.
Greetings from Germany
|
|
|
|
|
Yes, it will.
Anyway have a look at FAQ (at the bottom of the article's page). There are suggestions on using the #import directive and smart pointers (making your client-side life easier), see, for instance [^].
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
I had a look at the article and the FAQ section.
The problem I'm sitting with now is that I only have the DLL, thus no .tbl file, namespace or any address information.
------------
Come to the Dark Side, we have cookies
|
|
|
|
|
You don't need a .tlb file in order to use the #import directive.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
|
You may verify if the component is actually registered using, for instance, the OleView tool.
You may also try to register the DLL using the regsvr32 command line tool.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
I see (a few) _PatselPartnerSDK under interface using OleView. I've also ran the regsvr32 "[path_to_installed_dll]/PasSDK.dll" , but I still get the same problem (even rebooted the PC).
Interesting... In VC++ (6), when I type PasSDK::_PastelPartnerSDK:: then the IDE provides me with a list of functions, including the ImportCustomer function that I want to call...
It almost seems (to me) that it is a static function?
------------
Come to the Dark Side, we have cookies
|
|
|
|
|
Why don't you try to load, with your code, some well-known COM Component? (Thus having a well-know CLSID, for insatnce the MSComm {648A5600-2C6E-101B-82B6-000000000014})?
This way you can tell whether your client side code is good.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
I tried something else...
The typedef, I use the PasSDK::_PastelPartner but when creating the pointer, I use PasSDK::PastelPartner (without the "_", I saw that both interfaces where registered)
And it works!
But... (there seems to be always a "But")
The dang dll requires QPRO32.DLL , when calling a specific function inside this dll, which I figured out that it is a VB dll or a VB package / add-on dll. So I requested Pastel to send it to me. (They did not mentioned the system requirements)
------------
Come to the Dark Side, we have cookies
|
|
|
|
|
Why do you want use GetProcAddress to call COM methods?
You should go via CoCreateInstance in order to obtain the proper interface, this way gaining access to such methods.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
COM is not my strong point (and I've not done C++ in years). I'll look into CoCreateInstance , but I'm guessing that I may need a bit of learning to do when it comes to COM.
|
|
|
|
|
in my project i required to duplicate a dll.for that the procedure iam fallowing is copy the existing dll's code and modify according to my requirement.it includes so many dialog resouses.but when iam executing the code it showing a message saying that it has no required source files.my project is on vc++1.52.please help me...
kir_MFC
|
|
|
|
|
If it is only a translation, than you can use a resource.dll. There is documentation from Microsoft how to do.
Another way is be to make a copy of the *.vcproj file, rename it and insert in your solution.
Or make another build setting, but than you have some problems with the resources. Use a #define value in the project setting to make differences.
it is a wide area....
Greetings from Germany
|
|
|
|
|
|
In dialog box need to give one keysrike using SendInput().
For that i have to pass INPUT Structure, for this I declare one member for INPUT structure
but compiler gives "INPUT Undeclared Indentifier" error.
So i included winuser.h,windows.h but it still gives error.
without including header file(winuser,windows), mouse_event()function works fine.
anything i miss?
|
|
|
|
|
Try adding this
#define _WIN32_WINNT 0x0500
«_Superman_»
|
|
|
|
|