dnf里的dll怎么写
1.易语言怎么写DNF.dll文件注入器
.版本 2
.支持库 shell
.程序集 窗口程序集1
.程序集变量 输入法句柄
.子程序 __启动窗口_创建完毕, , 公开
热键.注册 (_启动窗口.取窗口句柄 (), , #Home键, &子程序1)
.子程序 输入法注DLL
写到文件 (取特定目录 (10) + “\SouGoo.ime”, #Shurufa)
写到文件 (取运行目录 () + “\feifei.dll”, #Dll)
输入法句柄 = 输入法.安装 (取特定目录 (10) + “\SouGoo.ime”)
.如果真 (输入法句柄 ≠ 0)
输入法.设置注入 (取特定目录 (10) + “\Sougoo.ime”, 取运行目录 () + “\feifei.dll”)
信息框 (“按Home呼出!!!”, 0, )
.如果真结束
.子程序 _按钮1_被单击
.如果真 (进程是否存在 (“DNF.exe”))
输入法注DLL ()
返回 ()
.如果真结束
信息框 (“游戏未运行!”, 0, )
.子程序 子程序1
.局部变量 进程, 逻辑型
进程 = 进程是否存在 (“DNF.exe”)
.如果真 (进程)
输入法.激活 (取句柄2 (“DNF.exe”, , ), 输入法句柄)
.如果真结束
.子程序 _按钮2_被单击
.局部变量 dnf进程, 逻辑型
dnf进程 = 输入法.卸载 (输入法句柄)
.如果 (dnf进程)
信息框 (“关闭成功!”, #信息图标, “系统信息”)
.否则
信息框 (“关闭失败!可能已经关闭!”, #信息图标, “系统信息”)
进程结束 (进程取ID (“DNF.exe”))
输入法.清除注入 (取特定目录 (10) + “\Sougoo.ime”)
删除文件 (取运行目录 () + “\feifei.dll”)
输入法.卸载 (输入法句柄)
结束 ()
.如果结束
输入法.清除注入 (取特定目录 (10) + “\Sougoo.ime”)
删除文件 (取运行目录 () + “\feifei.dll”)
输入法.卸载 (输入法句柄)
结束 ()
.子程序 __启动窗口_将被销毁
输入法.清除注入 (取特定目录 (10) + “\Sougoo.ime”)
删除文件 (取运行目录 () + “\SkinH_EL1.dll”)
输入法.卸载 (输入法句柄)
2.DNF 显示DLL
一旦出现蓝屏,版主就该立即记录下蓝屏代码,这样就可以依据代码对号入座,这样问题就很容易解决了。
回答版主的问题,首先我先说下蓝屏的原因有哪些,这样让版主对蓝屏有个大致的了解。其次,我在最后附上了一些蓝屏代码,供版主依代码来解决问题,当然代码很多我不可能全部列出来完。
剩余的,版主可以在最后的链接去查看更多代码。 电视机会出现蓝屏,电脑也会出现"蓝屏"。
电脑出现"蓝屏"时还会出现一连串警告,轻者只要按ESC就能返回,重者就会出现死机,使人十分烦恼。出现"蓝屏"无外有二种情况,一种是软件引起的,另一种是硬件引起的,软件引起的"蓝屏"故障,一般重装系统都能解决。
但也可以不重装系统来解决。而硬件引起的"蓝屏"故障,要根据具体的情况分别解决。
一、软件引起的"蓝屏"故障 1、重要文件损坏或丢失会引起"蓝屏"故障(包括病毒所致)。 WIN中VxD(虚拟设备驱动程序)或.DLL(动态连接库)之类的重要文件丢失会出现"蓝屏警告"。
解决的办法是利用Win的启动盘中的"Ext"来恢复被损坏或丢失的文件,步骤如下: (1)、先用WIN的启动盘起动电脑,在提示符下敲入"Ext"命令; (2)、在提示"Please enter the path to the Windows CAB files (a) :" 后输入WIN安装压缩包所在的完整路径,回车,如"E:\Pwin2003\Win2003; (3)、在提示"Please enter the name (s) of the file (s) you want to extract:"后输入你丢失的文件名,如"BIOS.Vxd",回车; (4)、在解压路径提示"Please enter path to extrct to (' Enter' for current directory): " 后输入文件将被解压到的完整路径,如"C:\Windows\System" 并回车,后面出现的提示,只要按YES回车即可,得新启动后就能恢复系统。注:因事先记下丢失的文件名,以便恢复) 如是病毒引起,可用杀毒软件来杀毒,并及时恢复中毒前的备份; 如果能启动图形界面,可采取重装主板以及显示卡的驱动程序,和进行"系统文件扫描"来恢复被破坏或丢失的文件,可从开始菜单内附件中的系统工具中找到; 2、注册表损坏导致文件指向错误所引起的"蓝屏" 在注册表被改动后或受到破坏,在开机或在调用程序时出现"蓝屏",并且屏幕有出错信息(包括出错的文件名)。
--解决方法是恢复注册表备份,重新启动计算机,切换到MS-DOS方式,进入Windows子目录,键入Scanreg\regstore 后回车,就可恢复最近一次注册表 3、在卸载程序后出现"蓝屏",多数是由于程序卸载不完善造成。解决办法:首先记下出错文件名,然后到注册表中找到以下分支"HKEY_LOCAL_MACHINE\Sysytem\CurrentControlSet\Services\VxD",在"查找"中输入出错的文件名,把查到键值删除即可。
4、在System.ini文件错误引起的"蓝屏",由于软件卸载或安装时没有即时更新System.ini造成"蓝屏"的,解决办法:禁用注册表中该项或重装相应软件或驱动程序; 由于Win98的spl和Microsoft的Vxd_fix.exe补丁程序对Win98的稳定起着重要的作用,可到华军网站下载补丁Vxd_fix.exe. 5、系统资源耗尽引起的蓝屏。这一类故障主要是三个堆资源(系统资源、用户资源、GDI资源)占用有情况有关。
--打开资源监视器,看一下剩余资源的情况,如这三种资源都 在50%甚至更低,就很容易出现"非法操作"、"蓝屏"、"死机"。因此,必须减少资源浪费,减少不必要的程序加载,避免同时运行大程序(如图形、声音和视频软件),如加载计划任务程序、输入法和声音指示、声卡的DOS驱动程序,系统监视程序等; 6、DirexctX问题引起的"蓝屏"故障。
如DirectX版本过高、过低;游戏与它不兼容或是不支持;辅助文件丢失;显卡对它不支持,都可能造成此故障。升级或重装DirectX,尝试更新显卡的BIOS和驱动程序,或升级显卡。
7.软件不兼容导致的。 二、硬件引起的"蓝屏"故障 此类故障主要有以下几种: 1.内存超频或不稳定。
主要出现随机性"蓝屏"。恢复正常频率运行,或找一根好的内存条进行替换,一般都能解决问题,还要注意和CPU内存条很近的散热问题; 2.硬件的兼容性不好引起的"蓝屏"。
由于DIY门使用的是兼容机,没有经过完善的监测,从而留下陷患, 如不同规格的内存条混插等,可交换内存条所插的插糟位置,或更换相同规格、厂家、批号的内存条都可解决问题。而内存条的好坏直接影响系统的稳定性,应特别引起重视; 3.硬件散热问题也会引起"蓝屏"。
这一类故障,往往都有一定规律,一般在电脑运行一段时间后才出现,表现中"蓝屏"死机或随意重启动,解决方法是很简单,不要随意超频,加强机内的降温。 4、I / O冲突也能引起"蓝屏"。
这种现象比较少,如果出现,可以从系统中删除带!号或?号的设备名,重新启动计算机,一般能解决。 三、预防措施 总之要做到防患于末然,只要能在平时能做到以下几点,就能有效地避免出现"蓝屏"或死机。
1.定期对注册表进行备份,出错时能够及时恢复到原来的状态; 2.尽量避免非正常关机,可减少重要文件丢失。如.VxD .DLL文件等; 3.一般而言,计算机能正常工作,没必要去升级著如显。
3.dll文件用什么语言写或者怎么制作
DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件。
Windows操作系统中的一些作为 DLL 实现的文件
·ActiveX 控件 (.ocx) 文件
ActiveX控件的一个示例是日历控件,它使您可以从日历中选择日期。
·控制面板 (.cpl) 文件
.cpl 文件的一个示例是位于控制面板中的项。每个项都是一个专用 DLL。
·设备驱动程序(.drv) 文件
设备驱动程序的一个示例是控制打印到打印机的打印机驱动程序。
链接方法:
当您在应用程序中加载 DLL 时,可以使用两种链接方法来调用导出的 DLL 函数。这两种链接方法是加载时动态链接和运行时动态链接。
在运行时动态链接中,应用程序调用 LoadLibrary 函数或 LoadLibraryEx 函数以在运行时加载 DLL。成功加载 DLL 后,可以使用 GetProcAddress 函数获得要调用的导出的 DLL 函数的地址。在使用运行时动态链接时,无需使用导入库文件。
Win32 DLL的特点
Win32 DLL与 Win16 DLL有很大的区别,这主要是由操作系统的设计思想决定的。一方面,在Win16 DLL中程序入口点函数和出口点函数(LibMain和WEP)是分别实现的;而在Win32 DLL中却由同一函数DLLMain来实现。无论何时,当一个进程或线程载入和卸载DLL时,都要调用该函数,它的原型是
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason, LPVOID lpvReserved);
其中,第一个参数表示DLL的实例句柄;第三个参数系统保留;这里主要介绍一下第二个参数,它有四个可能的值:DLL_PROCESS_ATTACH(进程载入),DLL_THREAD_ATTACH(线程载入),DLL_THREAD_DETACH(线程卸载),DLL_PROCESS_DETACH(进程卸载),在DLLMain函数中可以对传递进来的这个参数的值进行判别,并根据不同的参数值对DLL进行必要的初始化或清理工作。举个例子来说,当有一个进程载入一个DLL时,系统分派给DLL的第二个参数为DLL_PROCESS_ATTACH,这时,你可以根据这个参数初始化特定的数据。另一方面,在Win16环境下,所有应用程序都在同一地址空间;而在Win32环境下,所有应用程序都有自己的私有空间,每个进程的空间都是相互独立的,这减少了应用程序间的相互影响,但同时也增加了编程的难度。大家知道,在Win16环境中,DLL的全局数据对每个载入它的进程来说都是相同的;而在Win32环境中,情况却发生了变化,当进程在载入DLL时,系统自动把DLL地址映射到该进程的私有空间,而且也复制该DLL的全局数据的一份拷贝到该进程空间,也就是说每个进程所拥有的相同的DLL的全局数据其值却并不一定是相同的。因此,在Win32环境下要想在多个进程中共享数据,就必须进行必要的设置。亦即把这些需要共享的数据分离出来,放置在一个独立的数据段里,并把该段的属性设置为共享。
dll接口怎么写
1.dll 导出接口
注意C++的多态,接口只能是指针
IMyInterface* getInterface(); 这样才行
我写过一个接口封装类,发到你邮箱了。 虽然不是什么核心代码,但是也用在项目里了,代码不要公开。
哦 对了,仔细看了一下你的代码。突然发现你说GetProcessAdress取不到句柄。
那你是否在.DEF里面添加导出函数了呢?
就像这样
; ??.def : Declares the module parameters for the DLL.
LIBRARY "??"
DESCRIPTION ??Windows Dynamic Link Library'
EXPORTS
getInterface; Explicit exports can go here
2.Delphi编程 DLL编写接口怎么声明 在线等
//动态调用方式、先定义函数、后面在通过Button过程调入个函数接口地址
_GetPassWord:function (Pass:string):string;stdcall;
_CheckPassWord:Function(SourcePass:string;EncryPass:string):boolean;stdcall;
_StrEncrypt:Function(s: string; key: word): string;StdCall;
_StrDecrypt:Function(s: string; key: word): string;StdCall;
_GetRegistCode:Function(Pass:string):String;StdCall;
_CheckRegistCode:Function(CompanyName,RegistCode:string):Boolean;StdCall;
//下面为静态调用方式
function GetPassWord(Pass:string):ShortString;stdcall;external 'MyHRDLL.dll';
function CheckPassWord(SourcePass,EncryPass:string):Boolean;stdcall;external 'MyHRDLL.dll';
function StrEncrypt(s: string; key: word): ShortString;stdcall;external 'MyHRDLL.dll';
function StrDecrypt(s: string; key: word): ShortString;stdcall;external 'MyHRDLL.dll';
function GetRegistCode(Pass:string):ShortString;stdcall;external 'MyHRDLL.dll';
function CheckRegistCode(CompanyName,RegistCode:string):Boolean;stdcall;external 'MyHRDLL.dll';
动态调用的button实现:
procedure TForm1.Button5Click(Sender: TObject);
begin
try
_DLLMoudle := Loadlibrary('MyHRDLL.dll');
ShowMessage('初始化成功!!!');
except
ShowMessage('初始化失败!!!');
Exit;
end;
if _DLLMoudle > 32 then begin
Try
@_GetPassWord:=GetProcAddress(_DLLMoudle,'GetPassWord'); //打开串口
@_CheckPassWord:=GetProcAddress(_DLLMoudle,'CheckPassWord'); //关闭串口
@_StrEncrypt:=GetProcAddress(_DLLMoudle,'StrEncrypt'); //对卡号冲值
@_StrDecrypt:=GetProcAddress(_DLLMoudle,'StrDecrypt'); //删除卡号
@_GetRegistCode:=GetProcAddress(_DLLMoudle,'GetRegistCode'); //终端机清除刷卡记录
@_CheckRegistCode:=GetProcAddress(_DLLMoudle,'CheckRegistCode'); //
ShowMessage('DLL装载成功。。。。.');
Except
ShowMessage('出错!!DLL打开失败!!不能做其他操作!!');
End
end;
end;
3.DELPHI 写 标准接口DLL
Delphi写标准DLL接口,函数生命必须是 stdcall,否则在VB中将无法调用。
function OPENHE(b: Integer): integer; stdcall;
var
i: Integer;
begin
Result := b + i;
end;
VB 函数声明和调用
Public Declare Sub OPENHE Lib "Project1" (ByVal b As Long) as Long
4.Vb 6.0调用通信达交易接口.dll怎么写代码
要声明一个DLL过程,首先需要在代码窗口的"通用(General)"部分增加一个Declare语句。如果该过程返回一个值,应将其声明为
Function:
Declare Function publicname Lib "libname" [Alias "alias"] [([[ByVal] variable [As type] [,[ByVal] variable [As type]]。])] As Type
如果过程没有返回值,可将其声明为Sub:
Declare Sub publicname Lib "libname" [Alias "alias"] [([[ByVal] variable [As type] [,[ByVal] variable [As type]]。])]
缺省情况下,在标准模块中声明的DLL过程,可以在应用程序的任何地方调用它。在其它类型的模块中定义的DLL过程则是模块私有的,必须在它们前面声明Private关键字,以示区分。下面分别介绍声明语句的各个组成部分。
c语言dll怎么写
1. 用C语言如何写DLL?
//head file: asd.h
#ifdef _cplusplus
extern "C"{
#else
#endif
#ifdef HEAD_DLL
#define DLL_EXPORT _declspec(dllexport)
#else
#define DLL_EXPORT
#endif
int DLL_EXPORT asd_main(char* file_in, char* file_out);
#ifdef _cplusplus
}
#endif
//C file: asd.c
#include "asd.h"
int DLL_EXPORT asd_main(char* file_in, char* file_out)
{
FILE *in, *out;
in = fopen(file_in,"rb");
if(in == NULL)
return 0;
out = fopen(file_out,"wb");
if(out == NULL)
return 0;
//add code what you want:
。
}
2. 用C语言编写DLL
下面就是一个dll的主函数。加上一个空的导出函数.链接的时候目标是dll或者建立dll工程。连接器里面有设置
#include<windows.h>
__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下添加项可以实现开机启动。
当然还有其它方法。
3. 怎样用C编写DLL
要做自己的 动态连接库,首先要知道DLL在VC5.0中都有哪几种分类。
VC支持三种DLL,它们是: 1.Non-MFC Dlls 2.Regular Dlls 3.Extension Dlls Note:翻译措辞不当,故遇到术语是引用原词 Non-MFC DLL:指的是不用MFC的类库结构,直接用C语言写的DLL,其输出的函数一 般用的是标准C接口,并能被非MFC或MFC编写的应用程序所调用。LL, Regular DLL:和下述的Extension Dlls一样,是用MFC类库编写的。
明显的特点是 在源文件里有一个继承CWinApp的类。其又可细分成静态连接到MFC和动态连接到MFC上 的。
但静态连接到MFC的动态连接库只被VC的专业般和企业版所支持。 Extension DLL:用来实现从MFC所继承下来的类的重新利用,也就是说,用这种类 型的动态连接库,可以用来输出一个从MFC所继承下来的类。
Extension DLL使用MFC的 动态连接版本所创建的,并且它只被用MFC类库所编写的应用程序所调用。 各位看到这里如果眼有点花或头有点晕,请别泄气,再看两遍,然后继续往下看, 定有收获。
标 题: 关于VC中的DLL的编程[1] 这一节介绍Non-MFC DLLs的编写方法。下面是一个通用的 写法: BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call, LPVOID lpReserved) { switch( ul_reason_for_call ) { case DLL_PROCESS_ATTACH: 。
. case DLL_THREAD_ATTACH: 。
. case DLL_THREAD_DETACH: 。
. case DLL_PROCESS_DETACH: 。
. } return TRUE; } 每一个DLL必须有一个入口点,这就象我们用C编写的应用程序一样, 必须有一个WINMAIN函数一样。
在这个示例中,DllMain是一个缺省的入口函数,你不需要编写自己 的DLL入口函数,并用linker的命令行的参数开关/ENTRY声明。用这个缺 省的入口函数就能使动态连接库被调用时得到正确的初始化,当然了,你 不要在初始化的时候填写使系统崩溃的代码了。
参数中,hMoudle是动态库被调用时所传递来的一个指向自己的句柄 (实际上,它是指向_DGROUP段的一个选择符) ul_reason_for_call是一个说明动态库被调原因的标志。当进程或线程 装入或卸载动态连接库的时候,操作系统调用入口函数,并说明动态连接库 被调用的原因。
它所有的可能值为: DLL_PROCESS_ATTACH: 进程被调用 DLL_THREAD_ATTACH: 线程被调用 DLL_PROCESS_DETACH: 进程被停止 DLL_THREAD_DETACH: 线程被停止 lpReserved是一个被系统所保留的参数。 入口函数已经写了,盛下的也不难,你可以在文件中加入你所想要输 出的函数或变量或c++类或、或、或、?好象差部多了。
Look here!现在就 要加入一个新的输出函数了: void _declspec(dllexport) JustSoSo() { MessageBox(NULL,"It's so easy!","Hahaha。
",MB_OK); } 要输出一个类也可以,如下: class _declspec(dllexport) Easy { //add your class definition。 }; 各位一定注意到在输出函数或类是我用到_declspec(dllexport), 这是VC提供的一个关键字,用它可在动态连接库中输出一个数据、一个函数或一个类。
用这个关键字可省你不少事,你不用在.DEF文件 中说明我要输出这个类、那个函数的。 Ok!各位照着上面的例子试着敲敲看,Just so easy! 先说到这了。
4. 用C语言如何写DLL动态链接库
这是我以前的回答,是个两数加法的例子,看了就明白了
你的dll不必用h头文件,你用的是显式声明导出函数
vc在显式声明函数时会出现与vb不匹配的问题,他会把函数名改了,你必须用隐式声明,就是def文件声明才可以。
你的cpp里直接写
int __stdcall add(int a, int b)
{
return (a+b);
}
然后再在工程里添加一个文本文件,注意,文件名是 makedll(如果不对就是工程名).def
里面写
LIBRARY makedll
EXPORTS
add @1
然后保存
编译、连接
得到的dll就是vb可以调用的了
vb里呢,不用怎么改
如下
Public Declare Function add Lib "makedll.dll" (ByVal a As Integer,ByVal b As Integer) As Integer
Private Sub Command1_Click()
Dim c As Integer
c = add(1, 2)
MsgBox c
End Sub
这有就应该没问题了
5. C语言如何调用DLL
//dll
#include <windows.h>
extern "C" //保持C语言文件
void _declspec ( dllexport ) tryProc() //定义函数
{
MessageBox(NULL,_T("a"),_T("a"),MB_OK);
}-------------------------------------
//C
#include <windows.h>
int main()
{
HMOUDLE dll = LoadLibrary(/*DLL文件名*/);
if(dll != NULL)
{
FARPROC try = GetProcAddress(dll,"tryProc");
if(try != NULL)
{
tryProc();//假如函数有返回值,可以用try()得到返回值
/*_asm call tryProc*/
}
}
return 0;
}
转载请注明出处育才学习网 » 易语言dll怎么写
育才学习网