From fc0f0d8a0253f0a820f8d3262b6b1ab3b09ffd6a Mon Sep 17 00:00:00 2001 From: howhow Date: Tue, 7 Feb 2017 23:05:05 +0800 Subject: [PATCH] good night --- ...0\345\205\261\344\272\253\345\272\223.txt" | 55 +++++++++++++ ...C\350\257\255\350\250\200\357\274\211.txt" | 81 +++++++++++++++++++ hzInFile.cpp | 13 ++- 3 files changed, 145 insertions(+), 4 deletions(-) create mode 100644 "codeblocks/CodeBlocks\345\210\233\345\273\272\345\222\214\344\275\277\347\224\250\345\205\261\344\272\253\345\272\223.txt" create mode 100644 "codeblocks/Codeblocks\345\210\233\345\273\272\345\222\214\350\260\203\347\224\250DLL\345\212\250\346\200\201\351\223\276\346\216\245\345\272\223\357\274\210C\350\257\255\350\250\200\357\274\211.txt" diff --git "a/codeblocks/CodeBlocks\345\210\233\345\273\272\345\222\214\344\275\277\347\224\250\345\205\261\344\272\253\345\272\223.txt" "b/codeblocks/CodeBlocks\345\210\233\345\273\272\345\222\214\344\275\277\347\224\250\345\205\261\344\272\253\345\272\223.txt" new file mode 100644 index 0000000..4ed8be4 --- /dev/null +++ "b/codeblocks/CodeBlocks\345\210\233\345\273\272\345\222\214\344\275\277\347\224\250\345\205\261\344\272\253\345\272\223.txt" @@ -0,0 +1,55 @@ +CodeBlocks创建和使用共享库 +2012-11-16 10:19 1641人阅读 评论(0) 收藏 举报 + 分类: c语言(2) +版权声明:本文为博主原创文章,未经博主允许不得转载。 +建立一个最简单的只有一个get_id() 函数的DLL库 + 一、创建C语言共享库1.新建一个动态库的工程 +File - New - Project - Shared library - Go +编辑main.c +main.c +int add(int i1, int i2) +{ + return i1 + i2; +} + +然后编译,成功后在bin\Debug目录下生成3个文件:libtest6.dll,libtest6.dll.a,libtest6.dll.def + 二、动态链接库调用 +1、隐式调用 +1)建立一个test的工程File - New - Project - Console application - Go - 选择 c删除main.h,把库的test.h复制到工程中,现在就有main.c 和test.h +main.c +#include +#include +int add(int, int);//直接申明函数原型 +int main() +{ + printf("%d\n",add(1,2)); + system("pause"); + return 0; +} + +2)把dll库添加到工程中 +将刚刚生成的两个文件libtest6.dll.a, libtest6.dll复制到test工程的bin\Debug目录下 +Project - Build options - 左上角默认是Debug,不选这个,选上面那个test - Linker settings - Add 选择 bin\Debug\libtest6.dll.a - 确定,编译成功即可。 +2、显示调用 + +1)建立一个test1的工程File - New - Project - Console application - Go - 选择 编辑main.h, +main.c +#include +#include +typedef int(*lpAdd)(int,int); //定义函数类型 +HINSTANCE hDll; //DLL句柄 +lpAdd add; +int main() +{ + hDll = LoadLibrary(" libtest6.dll"); //加载 dll + add = (lpAdd)GetProcAddress(hDll, "add");//通过指针获取函数方法 + printf("id = %d\n", add(1,2) );//调用函数 + FreeLibrary(hDll);//释放Dll句柄 + system("pause"); + return 0; +} + +simple.h跟上面一样 +2)把dll库添加到工程中 +将刚刚生成的两个文件 libtest6.dll复制到test工程的bin\Debug目录下 +编译成功即可。 \ No newline at end of file diff --git "a/codeblocks/Codeblocks\345\210\233\345\273\272\345\222\214\350\260\203\347\224\250DLL\345\212\250\346\200\201\351\223\276\346\216\245\345\272\223\357\274\210C\350\257\255\350\250\200\357\274\211.txt" "b/codeblocks/Codeblocks\345\210\233\345\273\272\345\222\214\350\260\203\347\224\250DLL\345\212\250\346\200\201\351\223\276\346\216\245\345\272\223\357\274\210C\350\257\255\350\250\200\357\274\211.txt" new file mode 100644 index 0000000..b9740d1 --- /dev/null +++ "b/codeblocks/Codeblocks\345\210\233\345\273\272\345\222\214\350\260\203\347\224\250DLL\345\212\250\346\200\201\351\223\276\346\216\245\345\272\223\357\274\210C\350\257\255\350\250\200\357\274\211.txt" @@ -0,0 +1,81 @@ +Codeblocks创建和调用DLL动态链接库(C语言) +2012-11-15 16:39 12841人阅读 评论(1) 收藏 举报 + 分类: c语言(2) +版权声明:本文为博主原创文章,未经博主允许不得转载。 +来源:http://hi.baidu.com/hellosim/item/9ae4317168f4a74bee1e53cb +建立一个最简单的只有一个get_id() 函数的DLL库 + 一、创建C语言动态链接库 +1.新建一个动态库的工程 +File - New - Project - DLL - Go +新建的工程原来的main.cpp和main.h删除,新建两个文件simple.h, simple.c添加进工程 +注意默认是cpp文件,我们做C库,要用C文件 + +simple.h +#ifndef SIMPLE_H_INCLUDED +#define SIMPLE_H_INCLUDED +#ifdef BUILD_DLL + #define DLL_EXPORT __declspec(dllexport) +#else + #define DLL_EXPORT __declspec(dllimport) +#endif +int DLL_EXPORT get_id(void); +int DLL_EXPORT add(int,int); +#endif // SIMPLE_H_INCLUDED +simple.c +#include "simple.h" +int DLL_EXPORT get_id(void) +{ + return 10; +} +int DLL_EXPORT add(int x,int y) +{ + return x+y; +} + +然后编译,成功后在bin\Debug目录下生成3个文件:libsimple.dll.a, simple.dll,libsimple.dll.def + 二、动态链接库调用 +1、隐式调用 +1)建立一个test的工程File - New - Project - Console application - Go - 选择 c删除main.h,把库的test.h复制到工程中,现在就有main.c 和test.h +main.c +#include +#include "simple.h" +int main() +{ + printf("id = %d\n", get_id() ); + printf("id = %d\n", add(1,2) ); +system("pause"); + return 0; +} + + +simple.h跟上面一样 +2)把dll库添加到工程中 +将刚刚生成的两个文件libsimple.a, libsimple.dll复制到test工程的bin\Debug目录下 +Project - Build options - 左上角默认是Debug,不选这个,选上面那个test - Linker settings - Add 选择 bin\Debug\libsimple.dll.a - 确定,编译成功即可。 +2、显示调用 + +1)建立一个test1的工程File - New - Project - Console application - Go - 选择 编辑main.h, +main.c +#include +#include +typedef int(*lpGet_id)(void); //定义函数类型 +typedef int(*lpAdd)(int,int); //定义函数类型 +HINSTANCE hDll; //DLL句柄 +lpGet_id get_id; +lpAdd add; +int main() +{ + hDll = LoadLibrary("simple.dll"); //加载 dll + get_id = (lpGet_id)GetProcAddress(hDll, "get_id");//通过指针获取函数方法 + add = (lpAdd)GetProcAddress(hDll, "add");//通过指针获取函数方法 + printf("id = %d\n", get_id() );//调用函数 + printf("id = %d\n", add(1,2) );//调用函数 + FreeLibrary(hDll);//释放Dll句柄 + system("pause"); + return 0; +} + +simple.h跟上面一样 +2)把dll库添加到工程中 +将刚刚生成的两个文件libsimple.dll复制到test工程的bin\Debug目录下 +编译成功即可。 \ No newline at end of file diff --git a/hzInFile.cpp b/hzInFile.cpp index d108795..1ae7c00 100644 --- a/hzInFile.cpp +++ b/hzInFile.cpp @@ -13,15 +13,20 @@ void hzInFile (CString FileName) { c1=(unsigned char ) fgetc(in); // 转换为无符号字符 if(c1<128) + { continue; // 不处理单字节西文字符 - if(c1<176) + } + else if(c1<176) { c2=fgetc(in); continue; } // 也不处理非汉字字符,但要多读一个字节 - c2=(unsigned char ) fgetc(in); // 读入汉字的第二个字节 - id=HZ_ID(c1,c2); // 计算该汉字的下标 - HZFreq[id]++; // 给该汉字的频度加1 + else + { + c2=(unsigned char ) fgetc(in); // 读入汉字的第二个字节 + id=HZ_ID(c1,c2); // 计算该汉字的下标 + HZFreq[id]++; // 给该汉字的频度加1 + } } fclose(in); return;