返回列表 发帖

[原创]编写一个自己的dll

[这个贴子最后由x86在 2005/09/11 00:26am 第 1 次编辑] [watermark]哈哈,原理就不多说了,,请参阅本论坛的其他资料,发现网上关于动手制作的介绍比较的少,所以简单地写一个在vc6.0下制作一个简单的Non-MFC Dll的过程!!之所以选这种类型的是因为觉得他最通俗好懂,能够很快地制作其他的通用的dll。 准备工作:当然MS 的vc6.0啦。 新建-->project-->Win32 dynamic link library,project name假设为:firstdll。 选择an empty dll。然后finish。 然后新建-->c/c++source file name假设为1,然后ok。开始写代码: #include #include extern "C" __declspec(dllexport) void Test(void); //使用extern "c"使得在c++中也可以调用 //这里声明一个可以导出的函数名 BOOL APIENTRY DllMain( //dll的入口,相当于WinMain HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) {//每当调用dll时都先执行入口函数,在结束调用的时候也要执行入口函数 //除非用terminatethread和terminateprocess switch (ul_reason_for_call)//对被调原因说明的标志 { case DLL_PROCESS_ATTACH://进程调用 case DLL_THREAD_ATTACH://线程调用 case DLL_THREAD_DETACH://线程停止调用 case DLL_PROCESS_DETACH://进程停止调用 break; } return TRUE; } void Test()//我们可以调入的函数 { MessageBox(NULL,"First Dll!","WARNING",MB_OK|0x0030); } ok,编译通过!想运行,会提示输入一个调用他的exe文件。不管他,先取消了。这时候在debug文件夹里看到了firstdll.dll文件了。。下面我们来写一个调用程序。先关闭了这个工作区间。 然后 新建-->c/c++ source file,假设文件名为call.然后ok,开始写代码: #include #include void main() { typedef void(*send)(); send call; HINSTANCE Pdll; Pdll=LoadLibrary("firstdll.dll");//获得dll的入口地址 if(Pdll==NULL) {printf("get dll failed!\n"); exit(0); } else call=(send)GetProcAddress(Pdll,"Test");//获得函数的指针 call(); FreeLibrary(Pdll); } 然后编译运行,,哈哈,,可是却是get dll failed! 呵呵,因为firstdll.dll并不在当前文件夹或者系统文件夹或者系统的环境变量地址的下面。。我们把firstdll.dll复制到程序的文件夹下,然后再运行程序,,成功了!!!! [/watermark]

[原创]编写一个自己的dll

返回值
`

TOP

[原创]编写一个自己的dll

可以出个DLL专辑了!让大家一起讨论!

TOP

返回列表 回复 发帖