c++ DLL相关使用

实例: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



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值