zoukankan      html  css  js  c++  java
  • 静态链接库的编写

    自己有时候写程序,写了就丢了,根本没有什么代码的重用。看着那代码,每次都要重写,伤不起。

    最近看了下静态链接库和动态链接库的编写方法,个人还是比较喜欢静态链接库,虽然程序会更大,但如果不小心弄掉了DLL文件,就什么都不能用了。

    首先,创建一个静态链接库工程,名称为ConvertStaticLib

    这个静态链接库有一个函数,把二进制数转换为十进制数

    首先在StdAfx.h中添加

    1 #include <windows.h>
    2 #include <stdlib.h>
    3 #include <stdio.h>
    4 
    5 
    6 extern "C" void Convert(char* szDecOutput,char* szBinInput);

    其中头文件是编写函数过程中用的头文件

    extern "C" void Convert(char* szDecOutput,char* szBinInput);相当于导出函数

    下面是真正的实现部分

     1 // stdafx.cpp : source file that includes just the standard includes
     2 //    ConvertStaticLib.pch will be the pre-compiled header
     3 //    stdafx.obj will contain the pre-compiled type information
     4 
     5 #include "stdafx.h"
     6 
     7 //将二进制转换为十进制
     8 void Convert(char* szDecOutput,char* szBinInput)
     9 {
    10     int nDecimal=0;
    11     int Len=lstrlen(szBinInput);
    12     for (int i=0;i<Len;i++)
    13     {
    14         char h = szBinInput[Len-1-i];                                    
    15         char str[1];
    16         str[0]=h;
    17         int j = atoi(str);                                              
    18         for (int k=0;k<i;k++)                                            
    19         {
    20             j = j*2;
    21         }
    22         nDecimal = nDecimal+j;    
    23     }
    24     sprintf(szDecOutput,"%d",nDecimal);
    25 }

    这样,静态链接库就写好了,编译一下。

    =====================================================================

    创建一个新的工程,为一个控制台程序

    将静态链接库编译后的文件放入到该工程目录下

    在实现文件中添加

    1 #pragma comment(lib,"ConvertStaticLib.lib")
    2 
    3 extern "C" void Convert(char* szDecOutput,char* szBinInput);

    这样,就可以在代码中使用该函数了。

    下面是一个简单的例子

     1 #include "stdafx.h"
     2 #include <stdio.h>
     3 
     4 #pragma comment(lib,"ConvertStaticLib.lib")
     5 
     6 extern "C" void Convert(char* szDecOutput,char* szBinInput);
     7 
     8 
     9 int main(int argc, char* argv[])
    10 {
    11     char tk[256]="";
    12     char Input[]="10101010101001";
    13     Convert(tk,Input);
    14     printf("%s\n",tk);
    15     printf("hello\n");
    16     return 0;
    17 }

    其实就是将input作为输入,将tk作为输出,通过Convert转换,将二进制转换为对应的十进制。

    结果为

    我们先用计算器验证一下,发现结果是正确的,至于可能有其它的问题,需要在实际运用中发现,这里只是一个静态链接库的编写和运用。

    如果有什么问题,欢迎你指出来。

  • 相关阅读:
    windows中dos命令指南
    HDU 2084 数塔 (dp)
    HDU 1176 免费馅饼 (dp)
    HDU 1004 Let the Balloon Rise (map)
    变态杀人狂 (数学)
    HDU 2717 Catch That Cow (深搜)
    HDU 1234 开门人和关门人 (模拟)
    HDU 1070 Milk (模拟)
    HDU 1175 连连看 (深搜+剪枝)
    HDU 1159 Common Subsequence (dp)
  • 原文地址:https://www.cnblogs.com/tk091/p/2570822.html
Copyright © 2011-2022 走看看