函数工厂

刚才发现个好玩儿的看了半天,然后被快速排序卡住了。。。【笑哭】唉~~~算法~算法~算法~~~

哈哈 这个 网址 还不让访问。。。看下面那个 链接 找找看吧。

这是那个连接有兴趣 可以去看看还蛮好玩的。

慢慢来~,越是着急,越要慢,越是陌生的道路,越是不能跑。

先把 前面说过的 lib的例子在复习一遍。还是用 c写的,C++的调用还是没有去弄。

这次加了一个 头文件,稍微高端了一点儿。

为了保证程序的运行分别有这么几个地方要写:FunctionFactoryLib.lib;useFunctionFactory.c;myFunction.h;以及lib文件复制到当前目录下;

FunctionFactoryLib.lib

__declspec(dllexport)
int myAdd(int a, int b){
    return a + b;
}
__declspec(dllexport)
int myMinus(int a, int b){
    return a - b;
}
__declspec(dllexport)
int myMultiple(int a, int b){
    return a*b;
}
__declspec(dllexport)
int myDivision(int a, int b){
    return a / b;
}

__declspec(dllexport)
int myMax(int a, int b){
    if (a > b)
        return a;
    return b;
}
__declspec(dllexport)
int myMin(int a, int b){

    if (a < b)
        return a;
    return b;
}

useFunctionFactory里面的main.c

#include <stdio.h>

#include "myFunction.h"

#pragma comment(lib,"FunctionFactoryLib.lib")//这句话忘掉了
int main(){

    printf("myAdd(9,3) =%d 
", myAdd(9, 3));
    printf("myMinus(9,3) =%d 
", myMinus(9, 3));
    printf("myMultiple(9,3) =%d 
", myMultiple(9, 3));
    printf("myDivision(9,3) =%d 
", myDivision(9, 3));
    printf("myMax(9,3) =%d 
", myMax(9, 3));
    printf("myMin(9,3) =%d 
", myMin(9, 3));

    getchar();

}

myFunction.h

#ifndef _MYFUNCTION
#define _MYFUNCTION
int myAdd(int, int);
int myMinus(int, int);
int myMultiple(int, int);
int myDivision(int, int);
int myMax(int, int);
int myMin(int, int);
#endif

这种情况下 我们可以 用dumpbin /exports FunctionFactoryLib.dll 可以看看 人家都写了那些函数用于被调用。

/*

为了把这个东西用起来 老娘还颇费了一番功夫。。。

不知道 为什么我这里面没有这个 dumpbin.exe 所以 去下载了一个。

然后配到系统环境里面。

尿了,看来是时候,把我这个环境重新弄一遍了,下了dumpbin 然后 说没有 link.exe 然后 下了一个 linkd.exe 被坑了,下载对了之后,又说缺少mspdb60.dll 就大概想到 还是当初 vs2013有问题。因为到现在 我的vs都创建不了 控制台应用程序。。。尿了,,,

意淫一下 加上我看到了我 我想看到的结果 

利用 dumpbin /imports 文件名.exe 查看当前文件导入了什么dll文件

利用 dumpbin /exports 文件名.dll 查看当前 dll文件里面都有什么可供使用的函数。

参见 博文:http://www.cnblogs.com/dyllove98/archive/2013/06/20/3146922.html

我就是到这里面看到上面那个 笑话的~不要看太久·~~~,看个一页儿半,就得想到该去干活了~~~

*/

但是 有时候 我们就是 根本都不想让人家知道我们用了什么函数。

这种情况下可以使用函数工厂,把我们写的这6个方法在进行一次封装。这样,他就是用工具 或者 这种vs自带的 dumpbin.exe 也不能知道我们使用了什么函数,因为 他能得到的就只是 一个 调用函数们的指针函数入口。

长成这个样子:

int myMax(int a,int b){

if(a>b)return a;

return b;

}

void *myFunctions(const char *p){

  if(strcmp(p,"myMax"))return myMax;//? 我试试

}

//好像明白了 我每次下面都会报缺失 无法查找或者打开pdb 我想这就是 为什么我没有办法 创建 控制台应用程序 以及,没有办法 使用 dumpbin 等等操作的原因了。。。

换一台比较靠谱的机器。

当前这台机器貌似 还有12天 就要让我注册这个 程序了。。。

换了一天机器貌似依然不可以

 

原文地址:https://www.cnblogs.com/letben/p/5226920.html