Code Bye

C++创建了动态库后怎么样使用类

以下代码均在codeblocks下生成。
以下是本人编译生成的动态库STOCK.DLL的头文件STOCK.H,STOCK.CPP就不贴了。
#ifndef __STOCK_H__
#define __STOCK_H__
class Stock
{
private:
    char company[30];
    int shares;
    double share_val;
    double total_val;
    void set_tot(){total_val = shares*share_val;}
public:
    Stock();
    Stock(const char * co, int n = 0, double pr = 0.0);
    ~Stock() {}
    void buy(int num, double price);
    void sell(int num, double price);
    void update(double price);
    void show()const;
    const Stock & topval (const Stock & s) const;
};
#endif

之后本人准备调用该动态库,新建一TEST工程,main.cpp如下:

#include <iostream>
#include "stock.h"
using namespace std;
int main()
{
    Stock newStock;
    return 0;
}

编译的时候提示undefined reference to `Stock::Stock()”,提示该构造函数未定义
本人的理解是应该先
1. LoadLibrary()或dlopen()
2.GetProcAddress()或dlsym()
3.FreeLibrary或dlclose()
这样才能调用类中的构造函数,对吗?但是dlsym()中第二个参数:函数名 应该怎么填写,假如这样写代码量也特多了!
不清楚C++动态库中的类,应该怎么样在其他工程中调用,希望高手指点一下 研究一天了

解决方案

5

#pragma comment(lib,”.\sqlite3.lib”);
这个?

5

用LoadLibrary动态加载并使用C++的dll是很麻烦的。建议你还是静态加载吧。

10

假如使用显式加载,那么动态库导出一定要是函数,假如希望导出类,那就只能隐式加载

5

利用纯虚类做接口,通过编译器生成的vptr/vtbl调用,避免abi问题。
手工的话还是得转成C接口,可以集中到结构体里。初始化时返回结构体指针。调用时手工完成this指针传递与类型转换(一般会作为void*保存在结构体里)。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++创建了动态库后怎么样使用类