c++ DLL相关使用
2016-12-21 10:09
274 查看
实例:https://github.com/forever19l/FDocuments/tree/master/c%2B%2B/Project/DllDemo
c++创建dll
1、在头定义中使用extern"C"__declspec(dllexport)表示导出函数,可直接导出整个类,也可无类定义直接导出函数。
2、在有类定义的时候,导出的接口函数名并非原函数名,故有需求时可在外额外封装一层导出所需函数。
3、在cpp内函数头处使用extern"C"
(可不添加)。
4、编译生成dll后可使用depends.exe来查看导出的接口函数。
c++调用c++接口的dll
1、静态调用dll需要所调用模块的.h文件,.lib文件,.dll文件。
a、将.lib文件放到工程内,在 属性/配置属性/链接器/常规/附加库目录 处添加lib的路径;
b、在属性/配置属性/链接器/输入/附加依赖项 处添加xxx.lib。
c、将被调用的dll放在工程生成的dll或exe同一目录内。
d、将h文件放入工程文件夹内,将.h文件添加到头文件资源中,在所需处include即可。
2、动态调用dll
#include <Windows.h>
HINSTANCE hdll;
hdll=LoadLibrary("C:\\project\\CSocket\\Debug\\CSocket.dll");
if(hdll==NULL){
FreeLibrary(hdll); }
制作lua接口的c++ dll
1、添加interface.h,interface.h是给lua require该DLL的定义处。 LuaSocket是所生成DLL的名字。#include<stdio.h>
#include"lua.hpp"
extern "C"__declspec(dllexport)int
__cdecl luaopen_LuaSocket(lua_State * L);
2、添加interface.cpp,cpp为lua require该DLL的实现,该处流程完全一样。
#include"interface.h"
int tolua_global_open(lua_State* tolua_S);
int
__cdecl luaopen_LuaSocket(lua_State *L)
{
printf("< Load for Lua DLL LuaSocket > ...\r\n");
tolua_global_open(L);
printf("< Load for Lua DLL LuaSocket > Finished\r\n");
return 0;
}
3、资源文件内添加
b、添加global.pkg ,include封装给lua接口的c++头文件,并将lua所需的API接口定义加入pkg。
$#include "LuaSocket_function.h"
bool ConnectSocket(const char* ip, int port);
char* SendMsg(const char* cmd);
bool Close();
a、添加批处理文件global.bat (安装windows lua,并设置环境变量)。该批处理是使用tolua++.exe,通过带有接口定义的pkg文件来生成cpp文件(lua实现c++功能)。
rem tolua = C:\lua\bin\tolua++.exe
tolua++.exe -o global_lua.cpp global.pkg
c、使用批处理文件,生成global_lua.cpp文件,并将cpp加入工程内,编译工程即可得到带有lua接口的dll。
4、lua调用dll,在lua文件内添加以下两句即可。
package.cpath = package.cpath..";"..".\\?.dll"
require("LuaSocket");
5、注,如果lua调用的a.dll,a.dll依赖于b.dll,b.dll则需要在a.dll同一级目录下,亦或者a.dll使用的是动态调用b.dll
相关文章推荐
- 如何在C#中使用C/C++写的DLL。
- 举例说明如何在C#中使用C/C++写的DLL
- Windows编程 C++ DLL编程 学习笔记(一)静态链接库的创建和使用
- 用 Microsoft Visual C++ 创建一个使用 wpcap.dll 的应用程序,
- MFC(Visual C++ 6.0)中使用文件流fstream的相关问题
- 在C#中使用C/C++写的DLL
- 在VC使用DevIL: lib dll #include的相关设置
- Visaul C++ 6.0创建并使用DLL
- 使用 SWIG 实现 Java 调用 C++ DLL
- 使用C++调用C++ dll的关键步骤
- Eclipse中使用JNI调用C++ build的dll
- 使用Delphi调用C++编写的DLL
- 在 C++Builder 工程里使用 Visual C++ DLL——第2部分:C++ 类
- .net实例:使用C++调用C#的DLL
- 【原创】C++创建和使用动态链接库之Win32DLL
- C/C++中生成和使用DLL
- 在C#中使用C/C++写的DLL
- 在C#中使用C/C++写的DLL
- 将sqlite3编译成给WINCE使用的DLL,并封装成C++的步骤(使用VS2005)
- 在VC使用DevIL: lib dll #include的相关设置