
下面就是一个dll的主函数。加上一个空的导出函数链接的时候目标是dll或者建立dll工程。连接器里面有设置
#include<windowsh>
__declspec(dllexport) void FuncInDll (void)
{}
BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, void lpReserved)
{
HANDLE g_hModule;
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
g_hModule = (HINSTANCE)hModule;
break;
case DLL_PROCESS_DETACH:
g_hModule=NULL;
break;
}
return TRUE;
}
注册表 *** 作有一系列API函数可以调用。你可以在MSDN搜索以Reg开头的API如RegOpenKey,然后旁边一堆相关的注册表API。
注册表键值HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run下添加项可以实现开机启动。
当然还有其它方法。
C程序编译成dll文件只不过是在要公开的接口函数声明前面加上几个特定的修饰符而已。
下面是个例子,用dev-cpp建了个dll的默认文档
/dllh文件/
#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_ /
/dllmainc文件/
/ Replace "dllh" with the name of your header /
#include "dllh"
#include <windowsh>
#include <stdioh>
#include <stdlibh>
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:
break;
}
/ Returns TRUE on success, FALSE on failure /
return TRUE;
}
具体请参考jilei08124的CSDN博客
仅仅是为了方便调试?
没人会为了方便调试这样做的。一般常见的两种调试办法,一个是专门的DLL tester工具;一个是比较常用的,
在同一个解决方案里面添加一个project,这个project就是调用dll的所有函数的exe程序,可以是简单的对话框,可以是任何和dll适应的简单界面都ok
以上就是关于用C语言编写DLL全部的内容,包括:用C语言编写DLL、C语言程序怎么编译成dll文件供其他语言调用、如何将DLL的项目修改成Exe的可执行程序,以方便调试:等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)