c++ 动态库dll怎样使用 类 class,不包含头文件和.lib,请举例子
时间: 2024-03-08 14:50:15 浏览: 160
含有类的DLL的调用
如果你没有对应的头文件和 .lib 文件,你可以使用 LoadLibrary() 和 GetProcAddress() 函数来加载动态库 DLL 并获取类中导出函数的地址,然后通过函数指针来调用导出函数。下面是一个示例代码:
```
// 定义 MyClass 类的原型
class MyClass
{
public:
virtual void DoSomething() = 0;
};
typedef MyClass* (*CreateObjectFunc)();
int main()
{
// 加载动态库
HMODULE hDll = LoadLibrary("MyDll.dll");
if (hDll != NULL)
{
// 获取导出函数地址
CreateObjectFunc pCreateObject = (CreateObjectFunc)GetProcAddress(hDll, "CreateMyClass");
if (pCreateObject != NULL)
{
// 创建 MyClass 对象
MyClass* pMyClass = pCreateObject();
// 调用 MyClass 对象的成员函数
pMyClass->DoSomething();
// 释放 MyClass 对象
delete pMyClass;
}
// 卸载动态库
FreeLibrary(hDll);
}
return 0;
}
```
需要注意的是,由于没有对应的头文件和 .lib 文件,我们无法直接使用 MyClass 类。因此,在示例代码中,我们定义了 MyClass 类的原型,并通过函数指针调用工厂函数 CreateMyClass() 来创建 MyClass 对象。在动态库中,我们需要导出 CreateMyClass() 函数,并在导出函数中创建 MyClass 对象并返回指针。例如:
```
class MyClassImpl : public MyClass
{
public:
virtual void DoSomething() override
{
// ...
}
};
extern "C" __declspec(dllexport) MyClass* CreateMyClass()
{
return new MyClassImpl();
}
```
这样,我们就可以在主程序中使用 MyClass 类了。
阅读全文