C语言封装dll



一、首先,使用vs2008创建windows32控制台程序,选择dll复选框,确定。


然后在stdafx.h头文件中声明导出函数,举例如下


__declspec(dllexport) int  add(int a ,int b);//add是函数名,可声明多个


__declspec(dllexport) int  sub(int a ,int b);





如果创建的是C++工程则需要在函数声明前加上extern "C"


变成: extern "C" __declspec(dllexport) int  add(int a ,int b);




extern "C" __declspec(dllexport) int  sub(int a ,int b);


接着在你创建的C文件中实现上述函数体,如下




int __declspec(dllexport) add(int a ,int b)


{


return a+b;


}






int __declspec(dllexport) sub(int a,int b)


{


return a-b;


}


这个是C++中,如果仅仅使用一个c文件实现dll,举例如下


#include <windows.h>






__declspec(dllexport) int  add(int a ,int b);


__declspec(dllexport) int  sub(int a ,int b);


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;


}//这段代码c++工程自动生成






__declspec(dllexport) int add(int a ,int b)


{


return a+b;


}




int __declspec(dllexport) sub(int a,int b)


{


return a-b;


}


二、C调用dll


在创建一个新的工程。把之前生成的dll文件拷贝入调用工程的debug文件夹下。如果想方便,就顺便把lib文件也拷贝到debug下,因为三要用。键入如下代码:




#include<stdio.h>


#include <windows.h>


int main()


{


typedef int (*ADD)(int ,int);//函数指针类型


HINSTANCE Hint = LoadLibrary("adddll.dll");//加载我们刚才生成的dll


ADD add = (ADD)GetProcAddress(Hint,"add");//取得dll导出的add方法


printf("%d",add(3,4));


return 0;


}


当提示错误error C2664: “LoadLibraryW”: 不能将参数 1 从“const char [13]”转换为“LPCWSTR”    时,需要步骤三。




三、C调用lib,


把上述工程生成的lib文件拷入建立的工程下,然后在代码中加入如下语句


#pragma comment(lib,"adddllcpp.lib")


extern int add(int ,int);//没有加这句而只加上面这句(或在工程设置里加上DLL.lib)会链接错误


extern int sub(int ,int);




注意:工程属性字符集必须改成“使用多字节字符集”。

你可能感兴趣的:(C语言封装dll)