Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1229097
  • 博文数量: 788
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 7005
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-19 15:52
文章存档

2017年(81)

2011年(1)

2009年(369)

2008年(337)

分类:

2009-02-03 09:56:33



DLL代码如下:  
   
  library   DLLSplitString;  
   
  uses  
      SysUtils,  
      Classes;  
   
  {$R   *.res}  
   
  //     以下函数实现根据分隔符分隔字符,并将分隔出来的字符写进StringList中。  
  function   SplitString(Source,   Deli:   string   ):   TStringList;stdcall;  
  var  
      EndOfCurrentString:   byte;  
      StringList:   TStringList;  
  begin  
      StringList   :=   TStringList.Create;  
      while   Pos(Deli,   Source)>0   do  
      begin  
          EndOfCurrentString   :=   Pos(Deli,   Source);  
          StringList.add(Copy(Source,   1,   EndOfCurrentString   -   1));  
          Source   :=   Copy(Source,   EndOfCurrentString   +   length(Deli),   length(Source)   -   EndOfCurrentString);  
      end;  
      Result   :=   StringList;  
      StringList.Add(source);  
  end;  
  exports  
      SplitString;  
   
      begin  
  end.  
   
  程序中的调用过程:  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
      OneHandle:   THandle;  
  begin  
      OneHandle   :=   LoadLibrary('DLLSplitString.dll');    
      try  
          if   OneHandle   <>   0   then    
            @SplitString   :=   GetProcAddress(OneHandle,   'SplitString');  
          if   not   (@SplitString   =   nil)   then  
              ...  
       else  
         RaiseLastWin32Error;  
      finally  
          FreeLibrary(OneHandle);    
      end;  
  end;  
  为何一直报错   Undeclared   identifier:   'SplitString'   如何处理呢?  
   
 

procedure   TForm1.Button1Click(Sender:   TObject);  
   
  type  
      SplitString   =function   SplitString(Source,   Deli:   string   ):   TStringList;stdcall;  
  var  
      OneHandle:   THandle;  
  begin  
      OneHandle   :=   LoadLibrary('DLLSplitString.dll');    
      try  
          if   OneHandle   <>   0   then    
            @SplitString   :=   GetProcAddress(OneHandle,   'SplitString');  
          if   not   (@SplitString   =   nil)   then  
              ...  
       else  
         RaiseLastWin32Error;  
      finally  
          FreeLibrary(OneHandle);    
      end;  
  end;  
 

SplitString标识符未定义。  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
      OneHandle:   THandle;  
      SplitString:   function   (Source,   Deli:   string):   TStringList;  
  begin  
      OneHandle   :=   LoadLibrary('DLLSplitString.dll');    
      try  
          if   OneHandle   <>   0   then    
          SplitString   :=   GetProcAddress(OneHandle,   'SplitString');  
          if   SplitString   <>   nil   then  
              ...  
       else  
         RaiseLastWin32Error;  
      finally  
          FreeLibrary(OneHandle);    
      end;  
  end;



--------------------------
新闻:阿里巴巴宣布今年将新招聘5000人
导航:博客园首页  知识库  新闻  招聘  社区  小组  博问  网摘  找找看
阅读(281) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~