C++ 导出DLL和调用

8 篇文章 0 订阅
7 篇文章 0 订阅

.h 文件

#if defined(WIN32)
#ifdef PTS_API_EXPORTS
#define  PTS_API  __declspec(dllexport)
#else
#define  PTS_API  __declspec(dllimport)
#endif
#else
#define  PTS_API
#endif


extern "C" int PTS_API PTSMain(IDevice * device, IDisplay * display);

.cpp 文件

extern "C" int PTS_API PTSMain(IDevice * device, IDisplay * display)
{
	VehicleAttr vehicleAttr;
	IVehicle* vehicle = new Vehicle(vehicleAttr, device, display);

	display->LogData("Startup", "success");
	display->SetVehicle(vehicle);

	std::cout << "Hello World!\n";

	return 0;
}

调用方式

#ifdef WIN32
#include <Windows.h>
#endif // WIN32

HINSTANCE hDLL = ::LoadLibrary(wcPath);
	if (hDLL)
	{
		//int PTS_API PTSMain(const VehicleAttr & vehicleAttr, IDevice * device, IDisplay * display)
		//typedef  int (WINAPI* PTSFUNCTION)(const VehicleAttr&, IDevice*, IDisplay*);
		typedef  int (*PTSFUNCTION)(IDevice*, IDisplay*);

		//这里是获取调用dll函数的地址
		PTSFUNCTION fun = (PTSFUNCTION)GetProcAddress(hDLL, "PTSMain");
		if (fun)
		{
			if (mDisplay == nullptr)
			{
				mDisplay = new Display();
			}

			if (mDevice == nullptr)
			{
				mDevice = new Device();
			}

			//这里是调用dll中的函数  函数返回的是 int 类型数值
			//std::cout << (*fun)(mVehicleAttr, mDevice, mDisplay) << std::endl;
			std::cout << (*fun)(mDevice, mDisplay) << std::endl;
		}
		else
		{
			//如果调用错误就打印错误信息
			FXD << GetLastError();
			return false;
		}
	}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值