c语言怎么写dll库(dll是c语言写的吗)

日期:03-18

大家好,下面给大家分享一下如何用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语言写的吗?)这篇文章已经分享到这里了,希望对大家有所帮助。如果信息有误,请联系边肖进行更正。

标签: c语言 mfc 函数调用 dll文件

0.041933s