c语言调用dll动态库 -- 仅仅使用dll文件

本文详细介绍了如何创建和调用动态链接库(DLL),包括动态库的生成过程、导出函数的定义、模块文件的创建以及在主程序中加载和调用DLL的方法。通过具体示例代码展示了不同类型函数的实现和调用流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、动态库生成:

新建.cpp

#include <windows.h>
#include "CalSeedKey.h"

DLL_API int _key = 255;
DLL_API int seedkey = 0;

DLL_API int CalSeedKey1(int seed)
{
	seedkey = seed-1;
    return 0;
}

DLL_API int CalSeedKey2(int seed,int key)
{
	return seed+key;
}

DLL_API int CalSeedKey3(int seed, int key)
{
	key = seed + key;
	return 0;
}

新建.h

#ifdef DLL_EXPORTS
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif

extern DLL_API int seedkey;
extern DLL_API int _key;

DLL_API int CalSeedKey1(int seed);
DLL_API int CalSeedKey2(int seed ,int key);
DLL_API int CalSeedKey3(int seed ,int key);

新建入口函数dllmain.cpp:

#include <windows.h>
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

新建CalSeedKey.def模块文件导出函数:

LIBRARY
EXPORTS
seedkey @1
_key @2
CalSeedKey1 @3
CalSeedKey2 @4
CalSeedKey3 @5

生成dll:

2、dll加载调用

主要是指针函数的使用,通过dll导出函数的地址。

typedef int(*CalseedKey)(int a);
typedef int(*CalseedKey1)(int a,int b); 
typedef int(*_Key); 

新建callDll.cpp:

#include <stdio.h>
#include <windows.h>
int main()
{
	int a = 10, b = 10;
	HMODULE hDll = LoadLibrary("DLL.dll");
	if (hDll != NULL)
	{
		CalseedKey   seedKey = (CalseedKey) GetProcAddress(hDll, "CalSeedKey1");
		CalseedKey1 seedKey2 = (CalseedKey1)GetProcAddress(hDll, "CalSeedKey2");
		CalseedKey1 seedKey3 = (CalseedKey1)GetProcAddress(hDll, "CalSeedKey3");
		_Key seedkey = (_Key)GetProcAddress(hDll, "seedkey");
		seedKey(100);
		printf("\nCalSeedKey:%d", *seedkey);
		printf("\nCalSeedKeyReturn(%d,%d):%d",a,b, seedKey2(a, b));
		seedKey3(a, b);
		printf("\nCalSeedKeyReturn(%d,%d):%d",a,b, b);
	}
	return 0;
}

测试:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ya土豆儿~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值