如果创建的是C++工程则需要在函数声明前加上extern “C”变成,
extern "C" __declspec(dllexport) int add(int a ,int b);
extern "C" __declspec(dllexport) int sub(int a ,int b);
接着在你创建的工程文件中实现上述函数体,如下
int __declspec(dllexport) Func1(int a ,int b)
{
return 0;
}
int __declspec(dllexport) Func2(int a,int b)
{
return 0;
}
如果创建的是C的工程,那么导出函数方式如下
__declspec(dllexport) int add(int a ,int b); //add是函数名,可声明多个
__declspec(dllexport) int sub(int a ,int b);
如果仅仅使用一个c文件实现dll,举例
#include <windows.h>
__declspec(dllexport) int Func1(int a ,int b);
__declspec(dllexport) int Func2(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:
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}//这段代码是工程自动生成
__declspec(dllexport) int Func1(int a ,int b)
{
return 0;
}
int __declspec(dllexport) Func2(int a,int b)
{
return 0;
}
下面是一个基于C语言的对DLL创建的简单工程,
#include <windows.h>
_declspec(dllexport) void MsgBox(LPSTR szMsg);//将函数MsgBox导出到dll文件中
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
MsgBox("DLL_PROCESS_ATTACH");
break;
}
case DLL_PROCESS_DETACH:
{
MsgBox("DLL_PROCESS_DETACH");
break;
}
case DLL_THREAD_ATTACH:
{
break;
}
case DLL_THREAD_DETACH:
{
break;
}
}
return TRUE;
}
void MsgBox(LPSTR szMsg)
{
char szModuleName[MAX_PATH] = {0};
GetModuleFileName(NULL,szModuleName,MAX_PATH);
MessageBox(NULL,szMsg,szModuleName,MB_OK);
}