• visual studio中新建和使用dll


    本文的目的是 创建一个最小化的dll并使用它

    环境:win7 + vs2012

    一个VS的解决方案(sln)下面可以有多个项目(project),所以这里新建一个解决方案,然后下面创建两个项目。

     

    新建第一个 Win32 项目 my_dll,注意,是Win32,DLL空项目

    在 my_dll 工程的 头文件 里头 添加 新建项 取名 my_dll.h

    在 my_dll 工程的 源文件 里头 添加 新建项 取名 my_dll.cpp

    my_dll.h里头写入:

     1 //------------------ my_dll.h ----------------  
     2   
     3 #pragma once;  
     4   
     5 // 该宏完成在dll项目内部使用__declspec(dllexport)导出  
     6 // 在dll项目外部使用时,用__declspec(dllimport)导入  
     7 // 宏 MY_DLL_IMPLEMENT 在my_dll.cpp中定义  
     8 #ifdef MY_DLL_IMPLEMENT  
     9     #define MY_DLL_API __declspec(dllexport)  
    10 #else  
    11     #define MY_DLL_API __declspec(dllimport)  
    12 #endif  
    13 
    14 
    15 MY_DLL_API double my_add(double a, double b);

    my_dll.cpp里头写入:

     1 //------------------ my_dll.cpp ----------------  
     2   
     3 // 注意此处的宏定义需要写在#include "my_dll.h"之前  
     4 // 以完成在dll项目内部使用__declspec(dllexport)导出  
     5 // 在dll项目外部使用时,用__declspec(dllimport)导入  
     6 #define MY_DLL_IMPLEMENT   
     7   
     8 #include "my_dll.h"  
     9 
    10 double my_add(double a, double b)
    11 {  
    12     return a+b;  
    13 } 

    然后就变成这个样子:

    然后点击 my_dll 解决方案,右键 ->添加->新建项目

    新建一个 Win32 控制台程序 use_my_dll

    点击 控制台应用程序空项目

    在 use_my_dll 工程下的 源文件 添加 新建项 取名 main.cpp

     1 //------------------ main.cpp -------------------  
     2 #include "my_dll.h"  
     3 #include <iostream>  
     4 
     5 using namespace std;
     6   
     7 int main(char argc, char**argv)  
     8 {  
     9     cout << "----------------------" <<endl;  
    10     cout << "my_add: 3+5=" << my_add(3, 5)<<endl;  
    11     cout << "----------------------" <<endl;  
    12 
    13     system("pause");
    14     return 0;  
    15 } 

    然后整个页面如下:

    现在 添加新应用附加包含目录

    右键 use_my_dll 工程 选择属性,在“属性页”对话框中,展开“通用属性”节点、选择“框架和引用”,然后选择“添加新引用”按钮

    显示出 my_dll 工程,勾选并确定(如果my_dll工程和use_my_dll工程在不同的解决方案里,则这一步不会显示出任何工程,需要添加进来才能显示)

    再右键use_my_dll属性,依次展开“配置属性”节点和“C/C++”节点,然后选择“常规”“附加包含目录”旁边,指定 my_dll.h 头文件的位置路径。

    完成了这一步以后还要 右键 use_my_dll 工程将其 设为启动项目,缺了这一步会报错

    然后“调试”“开始执行(不调试)”就能显示出结果了:

    所有以my开头的变量和名字都可以随便取名。

    要实现复杂点的功能的话可以在头文件my_dll.h中声明命名空间和类,在my_dll.cpp中实现,在main.cpp中调用

    三个文件如下:

     1 //------------------ my_dll.h ----------------  
     2   
     3 #pragma once;  
     4   
     5 // 该宏完成在dll项目内部使用__declspec(dllexport)导出  
     6 // 在dll项目外部使用时,用__declspec(dllimport)导入  
     7 // 宏 MY_DLL_IMPLEMENT 在my_dll.cpp中定义  
     8 #ifdef MY_DLL_IMPLEMENT  
     9     #define MY_DLL_API __declspec(dllexport)  
    10 #else  
    11     #define MY_DLL_API __declspec(dllimport)  
    12 #endif  
    13 
    14 namespace my_namespace
    15 {
    16     class MY_DLL_API MySimpleDll
    17     {
    18     public:  
    19         MySimpleDll();  
    20         ~MySimpleDll();
    21 
    22         double my_add(double a, double b);
    23     };
    24 }
     1 //------------------ my_dll.cpp ----------------  
     2   
     3 // 注意此处的宏定义需要写在#include "my_dll.h"之前  
     4 // 以完成在dll项目内部使用__declspec(dllexport)导出  
     5 // 在dll项目外部使用时,用__declspec(dllimport)导入  
     6 #define MY_DLL_IMPLEMENT   
     7   
     8 #include "my_dll.h"  
     9 
    10 namespace my_namespace
    11 {
    12     MySimpleDll::MySimpleDll()
    13     {}
    14 
    15     MySimpleDll::~MySimpleDll()
    16     {}
    17 
    18     double MySimpleDll::my_add(double a, double b)
    19     {  
    20         return a+b;  
    21     } 
    22 }
     1 //------------------ main.cpp -------------------  
     2 #include "my_dll.h"  
     3 #include <iostream>  
     4 
     5 using namespace std;
     6 using namespace my_namespace;
     7 
     8 int main(char argc, char**argv)  
     9 {  
    10     MySimpleDll msd;
    11 
    12     cout << "----------------------" <<endl;  
    13     cout << "msd.my_add: 3+5=" << msd.my_add(3, 5) <<endl;  
    14     cout << "----------------------" <<endl;  
    15 
    16     system("pause");
    17     return 0;  
    18 } 
  • 相关阅读:
    iOS企业版打包 发布在线安装包 plist
    iOS企业版打包(转载)
    微信小程序开发入门教程
    SVN常用命令说明
    高仿QQ、微信效果的图片浏览器(支持原图和缩略图、多种手势、CocoaPods)
    iOS 调试大法
    MFMailComposeViewController发送邮件的实例
    自定义UISearchBar外观
    npm 包命令:不是内部或外部命令 问题分析
    angular 子路由跳转出现Navigation triggered outside Angular zone, did you forget to call ‘ngZone.run() 的问题修复
  • 原文地址:https://www.cnblogs.com/shepherd2015/p/5814039.html
Copyright © 2020-2023  润新知