现在是一个社会大分工的时代,需要专业人才,不欢迎“万金油”。DLL的出现正顺应了这个潮流,一部分人专门写函数,一部分人做程序。让我们写一个DLL感受一下。
  什么,你已经把VB打开了,VB能写DLL吗?ActiveX DLL并不是API DLL,别上当!关了VB吧,今天的主角是Borland C++!
  看过VB的查找文件例题吗?为什么VB只能按名称查找,不能查找“包含文字”呢?如果你实际做一下就会发现,VB太慢了,不适合搞文件读写。算了,用C++做一个DLL吧!
  DLL中有许多特殊的地方,不过有英明的编译器撑腰,我们不用管这些细节。DLL的源代码结构是这样的:
//DLL头,如果没有特殊要求,这几行是固定的,建议单独写进一个文件
BOOL WINAPI DllEntryPoint(HINSTANCE,DWORD,LPVOID)
{
    return true;
}

//在其它地方你可以自由地写任何函数
//格式:__declspec(dllexport) <返回值类型> WINAPI <函数名>[(参数)]
  总的说来,写DLL是很自由的。我们把包含文字功能写进DLL中吧。别忘了把前面介绍的DllEntryPoint添加进去哟,不然运行不起来别说我是骗小孩!
#include <windows.h>
#include <stdio.h>

__declspec(dllexport) BOOL WINAPI isInclude(char *filename,char *string)
{
    if(!filename)return false;

    FILE *check;

    if((check=fopen(filename,"r"))==NULL)
        return false;

    if(!string)return true;

    long len=strlen(string);

    //双缓冲查找!有趣不?
    char *buffer=new char[len*2];
    char *inputbuf=new char[len];

    if(fgets(buffer,len+1,check)==NULL)
    {
        fclose(check);
        return false;
    }

    while(!feof(check))
    {
        fgets(inputbuf,len+1,check);
        strcat(buffer,inputbuf);

        if(strstr(buffer,string))
        {
            fclose(check);
            return true;
        }

        memcpy(buffer,inputbuf,len+1);
    }

    fclose(check);
    return false;
}
  写完了,编译好,下面该收获了。打开VB吧!
  先Declare。开一个模块:
Declare Function isInclude Lib "schtxt.dll" Alias "@isInclude$qqspct1" (ByVal filename As String, ByVal text As String) As Boolean
  上面的Lib是我们编译出的Dll,如果你不用这个名字,记得要改过来哟!至于Alias后面那一串乱七八糟的东西是函数的入口点,使用Windows配备的快速查看可得到这串东西。我要骂Borland了,都是它的错!把我的Dll函数入口点弄得一塌糊涂。为什么不直接用函数名作入口点呢?
  建一个窗体。

  为TxtFile和TxtText的Change事件编写代码:
Private Sub TxtFile_Change()
    Check
End Sub

Private Sub TxtText_Change()
    Check
End Sub

Private Sub Check()
    If isInclude(TxtFile.text, TxtText.text) Then
        LbInc.Caption = "包含"
    Else
        LbInc.Caption = "不包含"
    End If
End Sub
  运行一下,在TxtFile中填入一个文件名,在TxtText中填上一段文字。看看下面的LbInc,这段文字包含在文件中吗?
  现在我们有万分把握写出新的查找程序了!不过不用指望它的速度能赶上Windows,Windows的查找是开过后门的。
  下载Dll示例吧!我把微软的查找例题也放了进去,Dll部分版权所有,但查找例题版权不属于我哟!^_^