c语言怎么写dll库(dll是c语言写的吗)
大家好,下面给大家分享一下如何用C语言写dll库(dll是用C语言写的吗)。很多人还不知道这一点。下面详细解释一下。现在让我们来看看!
1.如何用C语言写DLL?
//头文件:asd.h
#ifdef _cplusplus
外部" C"{
#否则
#endif
#ifdef HEAD_DLL
#定义DLL_EXPORT _declspec(dllexport)
#否则
#定义DLL_EXPORT
#endif
int DLL _ EXPORT ASD _ main(char * file _ in,char * file _ out);
#ifdef _cplusplus
}
#endif
//C文件:asd.c
#包含“asd.h”
int DLL _ EXPORT ASD _ main(char * file _ in,char* file_out)
{
文件*in,* out
in = fopen(file_in,“Rb”);
if(in == NULL)
返回0;
out = fopen(file_out,“WB”);
if(out == NULL)
返回0;
//添加您想要的代码:
。
}
2.用C语言写DLL
下面是一个dll的主要功能。添加空的导出函数。链接时,目标是dll或生成dll项目。连接器中有设置。
# include & ltwindows.h & gt
_ _ declspec(dll export)void func indll(void)
{}
BOOL API entry DllMain(HANDLE h module,DWORD dwReason,void* lpReserved)
{
处理g _ hModule
开关(dwReason)
{
案例DLL_PROCESS_ATTACH:
g _ hm odule =(h instance)hm odule;
打破;
案例DLL_PROCESS_DETACH:
g _ hModule = NULL
打破;
}
返回TRUE
}
注册表操作有一系列可以调用的API函数。你可以在MSDN搜索以Reg开头的API,比如RegOpenKey,然后旁边还有一堆相关的注册表API。
在注册表项HKEY _本地_机器\软件\微软\ windows \当前版本\运行下添加一个条目可以实现启动。
当然,还有其他方法。
3.如何用C写DLL
要做自己的动态连接库,首先要知道在VC5.0中dll分为哪几种。
VC支持三种动态链接库,它们是:1。非MFC DLLS 2。普通DLLS 3。扩展DLLS注:翻译措辞不当,所以遇到的术语是引用原词非MFC DLL:是指不用MFC的类库结构,直接用C语言编写的DLL,其输出函数一般使用标准的C接口,可以被非MFC或MFC编写的应用程序调用。LL,正则DLL:和下面的扩展DLL一样,是用MFC类库写的。
明显的特点是源文件中有一个继承CWinApp的类。可以细分为静态连接MFC和动态连接MFC。
但是静态连接MFC的动态连接库只有VC的专业版和企业版支持。扩展DLL:用来复用从MFC继承的类,也就是说可以用这个类类型的动态链接库输出一个从MFC继承的类。
扩展DLL是使用MFC的动态连接版本创建的,它只被用MFC类库编写的应用程序调用。看到这里,如果你的眼睛有点花或者头有点晕,请不要气馁。看两遍,然后继续往下看,会有收获的。
标题:关于VC中dll的编程这一节[1]介绍了非MFC DLLs的编程方法。下面是一般的写法:bool API entry dllmain(handle hmodule,dword ul _ reason _ for _ call,lpvoid LP reserved){ switch(ul _ reason _ for _ call){ case dll _ process _ attach:。
。案例DLL_THREAD_ATTACH:.
。案例DLL_THREAD_DETACH:.
。案例DLL_PROCESS_DETACH:.
。}返回TRUE}每个DLL都必须有一个入口点,就像我们用C写的应用程序一样,它必须有一个WINMAIN函数。
在此示例中,DllMain是默认的入口函数。不需要自己写DLL入口函数,用链接器命令行的参数switch /ENTRY声明。有了这个默认入口函数,动态链接库在被调用时就可以正确初始化。当然,你不应该填写在初始化期间使系统崩溃的代码。
参数,hMoudle是调用动态库时传递的自身句柄(实际上,它是_DGROUP段的选择器)。ul_reason_for_call是解释为什么调用动态库的符号。当进程或线程加载或卸载动态链接库时,操作系统调用入口函数,并解释调用动态链接库的原因。
它的所有可能值为:DLL_PROCESS_ATTACH:进程调用DLL_THREAD_ATTACH:线程调用DLL_PROCESS_DETACH:进程停止DLL_THREAD_DETACH:线程停止lpReserved是系统保留的参数。入门功能已经写好了,下载起来也不难。您可以在想要输出的文件中添加函数或变量或c 类或、或、或?好像有很多不同。
看这里!现在该添加新的输出函数了:void _ declspec (dll export) just搜搜(){messagebox (null,“太简单了!”,“哈哈哈。
“,MB _ OK);}也可以如下输出一个类:class _ declspec(dll export)easy {//添加你的类定义。};你一定注意到我在输出函数或者类的时候使用了_declspec(dllexport)。这是VC提供的一个关键字,可以用来输出动态链接库中的一个数据,一个函数或者一个类。
使用这个关键字可以节省你很多东西。你不需要在。我想输出这个类和那个函数。好吧!大家按照上面的例子试着敲一下看看,就这么简单!目前就这些。
4.如何用C语言编写DLL动态链接库
这是我之前的回答。这是两个数相加的一个例子。看完就懂了。
你的dll不需要使用H头文件,你使用导出函数的显式声明。
vc显式声明一个函数,就会出现和vb不匹配的问题。他将更改函数的名称。必须隐式声明,即可以用def文件声明。
直接写在你的cpp里
int __stdcall add(int a,int b)
{
返回(a b);
}
然后在项目中添加一个文本文件。注意文件名是makedll(如果不是,就是项目名)。净化
写在里面
库makedll
出口
添加@1
然后保存。
编译,连接
得到的dll就是vb可以调用的。
在vb中,不需要修改。
如下
公共声明函数add Lib“make dll . dll”(ByVal a为整数,ByVal b为整数)为整数
私有子命令1_Click()
Dim c为整数
c =加法(1,2)
MsgBox c
末端接头
应该没有问题。
5.如何在C语言中调用DLL
//dll
# include & ltwindows.h & gt
Extern "C" //保留C语言文件
void _ declspec(DLLExport)tryproc()//定义函数
{
MessageBox(NULL,_T("a "),_T("a "),MB _ OK);
} -
//C
# include & ltwindows.h & gt
int main()
{
HMOUDLE dll = LoadLibrary(/*DLL文件名*/);
如果(dll!=空)
{
FARPROC try = GetProcAddress(dll," tryProc ");
如果(试试!=空)
{
tryProc();//如果函数有返回值,可以使用try()获取返回值
/*_asm调用tryProc*/
}
}
返回0;
}
以上解释了如何用C语言写dll库(dll是用C语言写的吗?)这篇文章已经分享到这里了,希望对大家有所帮助。如果信息有误,请联系边肖进行更正。
相关推荐
- 出包王女有多少集02-16
- 考编和考公务员的区别12-01
- 花旗参泡水喝的功效 经常喝有这7大好处12-01
- 属鼠的几月犯月,属鼠的几月出生最不好12-01
- 中职专业课面试科目指定教材02-16
- 车轮胎到底多久更换一次12-01
- 做梦在结婚是什么征兆12-01
- 二极管漏电流多大时会影响使用寿命12-01
- 做梦打架是啥意思02-16
- 苹果13辅助圆球怎么设置12-01