zoukankan      html  css  js  c++  java
  • C++创建和使用动态链接库

    一个简单的动态链接库的生成和调用例子,太过简单,大神请绕道。

    一、创建动态链接库

    1. 使用vs创建工程选择动态链接库。

    2. 在项目中创建源文件和头文件,并在文件中添加以下代码。

    3. 在头文件中添加以下代码

      // dlltest.h   头文件,使用动态链接库时需要包含头文件
      
      #pragma once
      #ifdef __DLLEXPORT
      #define __DLL_EXP _declspec(dllexport)    // 导出函数 - 生成dll文件时使用
      #else
      #define __DLL_EXP _declspec(dllimport)    // 导入函数 -使用dll是使用
      #endif // __DLLEXPORT
      
      // 判断是否是c++
      #if defined(__cplusplus)||defined(c_plusplus)
      extern "C"
      {
      #endif
      	__DLL_EXP int add(int a, int b);
      	__DLL_EXP int sub(int a, int b);
      
      #if defined(__cplusplus)||defined(c_plusplus)
      }
      #endif
      
    4. 在源文件文件中添加以下代码

      // dlltest.cpp
      
      
      #include<stdio.h>
      #include"dlltest.h"
      #include"pch.h"
      
      
       int add(int a, int b)
      {
      	return a + b;
      }
      
       int sub(int a, int b)
      {
      	return a - b;
      }
      
    5. 在工程属性,C/C++ => 预处理器 => 预处理定义 中添加预定义宏__DLLEXPORT.

    6. 在工程属性,C/C++ => 预编译头 => 预处编译头 选择不使用预编译头。

    7. 编译生成dll文件和lib文件(如果没有生成lib文件,需要在工程中添加一个Source.def文件,内容为LIBRARY)。

    二、使用动态链接库

    1. 使用c++调用动态链接库

    1. 新建一个c++工程,包含dlltest.h头文件,并引用生成的lib文件。

    2. 添加源文件testcpp.cpp,在源文件中输入以下代码:

      #include <iostream>
      #include"dlltest.h"
      
      int main()
      {
      	printf("test cpp
      ");
          std::cout << "Hello World!
      "; 
      	printf("3+2 = %d
      ", add(3, 2));
      	printf("3-2 = %d
      ", sub(3, 2));
      }
      
    3. 编译,运行即可调用上面生成的动态链接库。

    2.使用c调用动态链接库

    1. 新建一个c语言工程,包含dlltest.h头文件,并引用生成的lib文件。

    2. 添加源文件testc.c,在源文件中输入以下代码:

      // testc.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
      //
      #include <stdio.h>
      #include "dlltest.h"
      
      int main()
      {
      	printf("test c
      ");
      	printf("3+2 = %d
      ", add(3, 2));
      	printf("3-2 = %d
      ", sub(3, 2));
      }
      
      
      
    3. 编译,运行即可调用上面生成的动态链接库。

  • 相关阅读:
    EF 错误解决
    TortoiseHg 学习笔记 (转)
    Mysql 命令行 使用 (转)
    2017-9-3 时间字符串格式化(转)
    2017-8-25 c# 获取url参数的五种方法(转)
    alert 的使用方法
    表单关键字查询写法
    Mysql和Mysqli的区别
    php MySQL中 增、删、改、查的写法格式
    一维、二维数组 与 常用的返回数组 以及 fetch_all与fetch_row的区别
  • 原文地址:https://www.cnblogs.com/ay-a/p/10976801.html
Copyright © 2011-2022 走看看