Hello,
I am very close to tear all my hairs out. I have been trying to resolve the functions from my custom dll but so far, no luck.
Here is the template I use:
QLibrary library
("E:/QT_works/myDll.dll");
if(library.load())
qDebug()<<"Loading done";
typedef void (*MyPrototype)();
MyPrototype myFunction = (MyPrototype) myLib.resolve("myFunction");
if (myFunction)
myFunction();
QLibrary library("E:/QT_works/myDll.dll");
if(library.load())
qDebug()<<"Loading done";
typedef void (*MyPrototype)();
MyPrototype myFunction = (MyPrototype) myLib.resolve("myFunction");
if (myFunction)
myFunction();
To copy to clipboard, switch view to plain text mode
Loading is successful. However, symbols cannot be resolved.
I used debugger and after the myLib.resolve step, the following error appears on the window where name and values are shown;
bq. errorString "Cannot resolve symbol "myFunction" in E:/QT_works/myDll.dll: The specified procedure could not be found." QString
I also used
HINSTANCE hDLLFeX;
hDLLFeX=LoadLibrary(L"myDll.dll");
if(hDLLFeX)
qDebug()<<"LOAD SUCCESSFUL";
MyPrototype myFunction = (MyPrototype) GetProcAddress(hDLLFeX, "myFunction");
HINSTANCE hDLLFeX;
hDLLFeX=LoadLibrary(L"myDll.dll");
if(hDLLFeX)
qDebug()<<"LOAD SUCCESSFUL";
MyPrototype myFunction = (MyPrototype) GetProcAddress(hDLLFeX, "myFunction");
To copy to clipboard, switch view to plain text mode
Both return a null pointer.
It's obvious that I cannot find the function declared in the library source file, but I guess I used correct syntax when declaring my function. What I used was
extern "C" {
...
void myFunction(int,int)
}
extern "C" {
...
void myFunction(int,int)
}
To copy to clipboard, switch view to plain text mode
It's good to mention that the same dll was used by someone else earlier in VS 6.0.
I also downloaded DependencyWalker and check the names of the functions inside myDll.dll. I noticed something which seemed to be interesting. The name of the function which dependencywalker shows is _Z8myFunctionPd, _Z8 in front and Pd at the end of the function. I guess it shouldn't be a problem.
I am not sure if I should resolve the symbols by the name shown in dependencywalker or the original name declared in extern "C".
I am hoping someone might be able to help me.
Thanks
Bookmarks