函数工厂
刚才发现个好玩儿的看了半天,然后被快速排序卡住了。。。【笑哭】唉~~~算法~算法~算法~~~
哈哈 这个 网址 还不让访问。。。看下面那个 链接 找找看吧。
这是那个连接有兴趣 可以去看看还蛮好玩的。
慢慢来~,越是着急,越要慢,越是陌生的道路,越是不能跑。
先把 前面说过的 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 \n", myAdd(9, 3)); printf("myMinus(9,3) =%d \n", myMinus(9, 3)); printf("myMultiple(9,3) =%d \n", myMultiple(9, 3)); printf("myDivision(9,3) =%d \n", myDivision(9, 3)); printf("myMax(9,3) =%d \n", myMax(9, 3)); printf("myMin(9,3) =%d \n", 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天 就要让我注册这个 程序了。。。
换了一天机器貌似依然不可以