1.首先创建一个生成dll的项目:打开VS2010,创建dll项目有两种方式,基于MFC DLL和基于Win32控制台应用程序,这里我们选择基于Win32控制台构建。
a。文件--新建--项目(项目名为myAPI)--Visual C++--Win32--选择Win32控制台应用程序;
b。下一步如下图所示。选择 DLL 作为程序类型。如果没有特殊需要,选择一个空项目来完成。项目已创建;
2。定义头文件:将头文件myAPI.h添加到工程中,内部添加如下代码,
#ifndef _DLL_API
#define _DLL_API _declspec(dllexport)
#else
#define _DLL_API _declspec(dllimport)
#endif
_DLL_API int ADD(int a,int b);
内部定义了一个ADD()函数接口。如果需要添加其他功能接口,可以继续定义,比如
_DLL_API int MINUS(int a,int b);
_DLL_API int otherfunc(int,int,int);
3。定义源文件:将对应的源文件myAPI.cpp添加到工程中,然后在源文件中定义函数,内部添加如下代码,
#include "myAPI.h"
1。首先创建生成dll的项目:打开VS2010,创建dll项目有两种方式,基于MFC DLL和基于Win32控制台应用程序。这里我们选择基于Win32控制台构建。 ? ? A。文件--新建--项目(项目名为myAPI)--Visual C++--Win32--选择Win32控制台应用程序; ? ? b.接下来,如下图下一步,程序类型选择DLL,如果没有特殊需要,选择一个空项目完成,项目就建立了;
2.定义头文件:将头文件myAPI.h添加到工程中?内部添加以下代码,
[cpp]?
普通视图
?复制
#ifndef?_DLL_API?? #define?_DLL_API?_declspec(dllexport)?? #别的?? #define?_DLL_API?_declspec(dllimport)?? #万一?? ?? _DLL_API?int?ADD(int?a ,int?b);??
内部定义了一个ADD()函数接口。如果需要添加其他功能接口,可以继续定义,比如
[cpp]?
普通视图
?复制
_DLL_API?int?MINUS(int?a,int?b);?? _DLL_API?int?otherfunc(int,int,int);??
3。定义源文件:将对应的源文件myAPI.cpp添加到工程中?然后在源文件中定义函数,内部添加如下代码,
[cpp]?
普通视图
?复制
#include?"myAPI.h"?? ?? int?ADD(int?a,int?b){?? ???返回?a+b;?? }??
4。编译通过并生成dll:这里有个小建议,因为dll工程不会生成exe,API无法实时测试,所以建议一般情况下调试测试通过API的函数体代码先空项目,然后再创建一个dll项目,直接编译,这样比较方便可靠。回到正题,dll工程编译通过后,有用的东西就是Debug目录下的myAPI.h头文件和新生成的myAPI.dll和myAPI.lib文件,
5.调用dll:为了测试我们刚刚生成的dll,新建一个项目mytest。包含声明 myAPI.h 头文件,其中存储了定义的接口。将myAPI.dll文件放入新工程的Debug文件夹中(执行.exe时需要调用,如果新工程没有编译,则没有Debug文件夹,编译后,该文件夹可用然后将放置dll文件)。将 myAPI.lib 文件放在与源文件和头文件相同的路径中(编译期间需要)。接下来需要将.lib资源添加到项目中,两种方法。
? ?一种方法是在项目属性-链接器-输入中的“附加依赖项”中添加myAPI.lib文件(当然也有不设置此项也编译成功的经验,但不推荐); ? ?另一种调用方式是在新建项目的主程序中添加如下命令,无需设置依赖;
[cpp]?
普通视图
?复制
#pragma?comment(lib,"myAPI.lib")??
至此,所有任务完成。编译通过后就可以正常使用自己定义的API了~
1。首先创建生成dll的项目:打开VS2010,创建dll项目有两种方式,基于MFC DLL和基于Win32控制台应用程序。这里我们选择基于Win32控制台构建。
? ? A。文件--新建--项目(项目名为simple_Dll)--Visual C++--Win32--选择Win32控制台应用程序;
? ? b.接下来,进入下一步,如下图所示。选择 DLL 作为程序类型。如果没有特殊需要,选择一个空项目来完成。项目已创建;
2。定义头文件:将头文件SimpleDll.h添加到工程中?内部添加以下代码,
#ifndef _DLL_API
#define _DLL_API _declspec(dllexport)
#其他
#define _DLL_API _declspec(dllimport)
#endif
#include
#包括
#包括
#包括
_DLL_API int add(int x, int y); //简单方法
_DLL_API const wchar_t* getPlayUrl(const wchar_t* mgrIp, 长mgrPort, 长materialId);
_DLL_API const char* getUrl(const char* mgrIp, long mgrPort, long MaterialId);
3。定义源文件:将对应的源文件SimpleDll.cpp添加到工程中?然后在源文件中定义函数,内部添加如下代码,
#include "SimpleDLL.h"
int add(int x, int y)
{
返回x+y;
}
const wchar_t* getPlayUrl(const wchar_t* mgrIp, 长mgrPort, 长materialId)
{
静态 wchar_t url[260] = { 0 };
wcscpy_s(url, L"http://中文");
wcscat_s(url, mgrIp);
wcscat_s(url, L":");
wchar_t szPort[20] = { 0 };
_ltow_s(mgrPort, szPort, 10);
wcscat_s(url, szPort);
返回网址;
}
const char* getUrl(const char* mgrIp, 长mgrPort, 长materialId)
{
静态字符 url[260] = { 0 };
strcpy_s(url, "http://中文");
strcat_s(url, mgrIp);
strcat_s(url, ":");
char szPort[20] = { 0 };
_ltoa_s(mgrPort, szPort, 10);
strcat_s(url, szPort);
返回网址;
}
4。编译通过并生成dll:这里有个小建议,因为dll工程不会生成exe,API无法实时测试,所以建议一般情况下调试测试通过API的函数体代码先空项目,然后再创建一个dll项目,直接编译,这样比较方便可靠。回到正题,dll工程编译通过后,有用的东西就是Debug目录下的SimpleDll.h头文件和新生成的Simple_Dll.dll和Simple_Dll.lib文件,
5.调用dll:为了测试我们刚刚生成的dll,新建一个项目mytest。包含声明 SimpleDll.h 头文件,其中存储了定义的接口。将simple_Dll.dll文件放入新工程的Debug文件夹中(执行.exe时需要调用。新工程如果不编译,则不会有Debug文件夹,编译后,该文件夹可用然后将放置dll文件)。将Simple_Dll.lib文件放在与源文件和头文件相同的路径中(编译期间需要)。接下来需要将.lib资源添加到项目中,两种方法。
? ?一种方法是在项目属性-链接器-输入中的“附加依赖项”中添加Simple_Dll.lib文件(当然也有不设置此项编译成功的经验,但不推荐); ? ?另一种调用方式是在新建项目的主程序中添加如下命令,无需设置依赖;
#pragma comment(lib, "Simple_Dll.lib") //添加lib文件引用
6.测试
#include "SimpleDll.h" //添加头文件引用
#pragma comment(lib, "Simple_Dll.lib") //添加lib文件引用
#包括
#包括
int main()
{
setlocale(LC_ALL, "chs"); //配置本地化信息为简体中文,否则打印出来的中文会乱码
wprintf(L"getPlayUrl: %s\r\n", getPlayUrl(L"127.0.0.1", 10087, 1));
printf("getUrl: %s\r\n", getUrl("127.0.0.1", 10087, 1));
系统(“暂停”);
返回0;
}