在主应用程序中调用加载的库函数时,需要确保库函数已经被正确加载并且符号已经被导出。以下是一些可能的方法:
#include<windows.h>
typedef int (*FuncPtr)(int, int);
int main() {
HINSTANCE hDLL = LoadLibrary("mylibrary.dll");
if (hDLL != NULL) {
FuncPtr myFunc = (FuncPtr)GetProcAddress(hDLL, "myFunction");
if (myFunc != NULL) {
int result = myFunc(1, 2);
FreeLibrary(hDLL);
return result;
}
}
return -1;
}
#include <dlfcn.h>
typedef int (*FuncPtr)(int, int);
int main() {
void *hDLL = dlopen("libmylibrary.so", RTLD_LAZY);
if (hDLL != NULL) {
FuncPtr myFunc = (FuncPtr)dlsym(hDLL, "myFunction");
if (myFunc != NULL) {
int result = myFunc(1, 2);
dlclose(hDLL);
return result;
}
}
return -1;
}
#include<memory>
class MyBase {
public:
virtual int myFunction(int a, int b) = 0;
};
class MyDerived : public MyBase {
public:
virtual int myFunction(int a, int b) {
return a + b;
}
};
int main() {
std::shared_ptr<MyBase> pBase = std::make_shared<MyDerived>();
std::shared_ptr<MyDerived> pDerived = std::dynamic_pointer_cast<MyDerived>(pBase);
if (pDerived != nullptr) {
int result = pDerived->myFunction(1, 2);
return result;
}
return -1;
}
无论哪种方法,都需要确保库函数已经被正确加载并且符号已经被导出。此外,还需要注意库函数的参数类型和返回值类型,以确保正确调用。
领取专属 10元无门槛券
手把手带您无忧上云