关于c语言创建dll文件及dll文件的调用
近来又有人在群里问如何用c语言编制dll文件(动态链接库)。
原来没有对这个问题太在意过,也没有尝试过任何解决方案,毕竟原来我是用vb的(现在用.net),做个dll只不过是点选一下建立activeX dll工程的图标而已。今天在网上与朋友聊天,看了他指给我的几个几个文件,用MingW将C程序编译成dll文件的例子,我恍然大悟,原来讲C程序编译成dll文件只不过是在要公开的接口函数声明前面加上几个特定的修饰符而已。于是用dev-cpp建了个dll的默认文档,一切都很明了。(我把源代码贴在下面)
/*dll.h文件*/
#ifndef _DLL_H_
#define _DLL_H_
#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */
DLLIMPORT void HelloWorld (void);
#endif /* _DLL_H_ */
/*dllmain.c文件*/
/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
DLLIMPORT void HelloWorld ()
{
MessageBox (0, "Hello World from DLL!\n", "Hi", MB_ICONINFORMATION);
}
BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ ,
DWORD reason /* Reason this function is being called. */ ,
LPVOID reserved /* Not used. */ )
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
相关文档:
写在前面:
论坛里总有那么一些问题是长盛不衰的,今天这个问,明天那个问,到历史帖子里一搜可以抓出来一大把。有时候这都令我怀疑是不是我们的教育体制存在问题……
于是我开了这篇文章,搜集我见到的长生不老之帖,希望可以起到参考价值。
这里使用的编译环境为 gcc/g++ 4.3.3 for ubuntu 9. ......
下面是我关于C语言中各种数据类型长度的总结:(参考The C Programming Language)
1. c语言中的整数类型有char, short, int, long等几种, 下面是C语言对每种数据类型长度的规定:
(a). short和long类型的长度不相同
(b). int类型通常同具体机器的物理字长相同
(c).&nb ......
C语言中没有函数重载的概念!!
C语言中没有函数重载的概念!!
今天MSN群中有个人问我C语言的问题:
(两个函数实现的功能相同
但是它们参数的个数不同
我用一个函数把这个两个函数封起来
&n ......
C++中的Static有两个作用。
1、 静态局部变量
静态局部变量在函数内定义 它的生存期为整个源程序,但是其作用域在该函数内,只能在定义该变量的函数内使用该变量。 允许对构造类静态局部量赋初值,若未赋以初值,则由系统自动赋以0值。
void fun1()
{
static int i = 0;
......
GNU/Linux有两套库可用于正则表达式编程:POSIX库和PCRE库。前者不需要单独安装,一般需求还是能满足的,速度稍慢些。后者是久负盛名的Perl正则表达式库,功能强大,匹配速度快,不过可能需要单独安装。
我们先用一个例子来介绍如何使用POSIX库。
#i nclude <stdio.h>
#i nclude <sys/ty ......