LoadLibrary c++ dll 之后如何使用。

飞翔的薄荷 2017-01-24 01:52:21
c++ dll 除了可以到处函数,还可以导出类,以及变量。

LoadLibrary之后如何使用这些类和变量。比如下面的代码,是vs自动生成的dll头文件。如何使用CConsoleApplication8和nConsoleApplication8



// 下列 ifdef 块是创建使从 DLL 导出更简单的
// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 CONSOLEAPPLICATION8_EXPORTS
// 符号编译的。在使用此 DLL 的
// 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
// CONSOLEAPPLICATION8_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
// 符号视为是被导出的。
#ifdef CONSOLEAPPLICATION8_EXPORTS
#define CONSOLEAPPLICATION8_API __declspec(dllexport)
#else
#define CONSOLEAPPLICATION8_API __declspec(dllimport)
#endif

// 此类是从 ConsoleApplication8.dll 导出的
class CONSOLEAPPLICATION8_API CConsoleApplication8 {
public:
CConsoleApplication8(void);
// TODO: 在此添加您的方法。
};

extern CONSOLEAPPLICATION8_API int nConsoleApplication8;

CONSOLEAPPLICATION8_API int fnConsoleApplication8(void);



使用:
int main()
{
auto pMod = LoadLibrary(L"ConsoleApplication8.dll");
std::cout << nConsoleApplication8 << std::endl;
CConsoleApplication8 *pddddd = new CConsoleApplication8();

getchar();
return 0;
}


1>ConsoleApplication6.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall CConsoleApplication8::CConsoleApplication8(void)" (__imp_??0CConsoleApplication8@@QAE@XZ),该符号在函数 _main 中被引用
1>ConsoleApplication6.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) int nConsoleApplication8" (__imp_?nConsoleApplication8@@3HA)
1>C:\Users\tydq\documents\visual studio 2015\Projects\ConsoleApplication6\Debug\ConsoleApplication6.exe : fatal error LNK1120: 2 个无法解析的外部命令
...全文
1255 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
OnTheWay_Boy 2017-02-09
  • 打赏
  • 举报
回复
库文件包含的是cpp文件编译后的文件,添加这个库文件的头文件,直接调用就行了
zgl7903 2017-02-03
  • 打赏
  • 举报
回复
DLL中类导出不能使用显式连接
schlafenhamster 2017-01-31
  • 打赏
  • 举报
回复
要GetProcAdress 如; typedef BOOL (__stdcall *pGetCount)(HIMAGELIST himglst); DWORD WINAPI rtGetImageCount(LPVOID lpParam) { HINSTANCE hInst = ::LoadLibrary("comctl32.dll"); if (!hInst) { AfxMessageBox("can't load comctl32.dll" ); return -1; } // get adress of 'ImageList_GetImageCount' pGetCount pfunCall = (pGetCount)GetProcAddress(hInst, "ImageList_GetImageCount"); FreeLibrary(hInst); *(((pPARAMETER)(lpParam))->pretCount) = pfunCall((HIMAGELIST)lpParam); return 0; } 隐式连接使用 。lib 文件
oyljerry 2017-01-31
  • 打赏
  • 举报
回复
导出类的方式要用lib方式直接link。然后包含h文件就可以使用类了
隔壁小王哥 2017-01-24
  • 打赏
  • 举报
回复
未解析的外部符号,出现这个错一般两个原因,第一 库没有加载到。第二申明没有实现。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧