I'm new to Pelles-C although well used to C, Python a good variety of things in between. I'm struggling to get my head around importing DLLs and would welcome any advice on offer.
Essentially I've got a 10 line C test app which calls various functions in windows DLL (msmapi32.dll - Micronetics MSM-Activate API). On compiling I get
POLINK: error: Unresolved external symbol '_msm_initialize'.
i.e. a straight forward linker error. I thought I needed to import the DLL so I tried
polib /OUT:msmapi32.lib /MAKEDEF:msmapi32.def msmapi32.dll
but neither adding the lib nor the def to the project solves it. I've scoured google trying to find an example or some other hint and all seem suggest that these steps are what I need to do but to no avail. I've tried everything I can think of but am ready to hit it with something big and heavy.
In python the ctypes library imports and uses this dll without any difficulty if that helps.
Could some kind soul put me out my misery and give me a clue which incantantation will fix this.
Kind regards
Iain
Look for MSMOLE.DLL
Those function may be there.
Thanks - aware of MSMOLE for OLE connections but still trying to get my head round how to access a windows DLL successfully. The DEF file all looks to have the right function names suggesting that implib has done it's work... I just can't figure out how to link the darned beast in successfully.
Can anyone point me in the right direction?
Thanks
The Wooly One
This is a short article on how to make and access DLL's. Maybe it can help.
http://www.c.neatinfo.com/public/4-tutors/DLL-in%20C%20&%20C++.doc
With PEView.exe you can look at exe/dll to see exported functions.
http://www.magma.ca/~wjr/ (http://www.magma.ca/~wjr/)
Microsoft's MSMAPI32.DLL doesn't have msm_initialize function.
Thanks for the replies one and all. Some useful suggestions. In the end I found it boiled down to:
1. Use the implib utility with the /OUT parameter to generate a LIB file from the DLL
2. Ignore the temptation to make a DEF file with implib /DEF. Adding it to the project just caused compiler confusion.
3. Add the LIB file to the project properties on the linker tab.
4. And the key bit... preface all function prototypes with __stdcall e.g. int __stdcall msm_initialize();
Those 4 steps made it work nicely. The rest of my woes were buggy example code and all the other delights of codesmithery.
Thanks again
The Wooly One