{$R *.res}
exports
  BT_ReadXML;
begin 
 try
  CoInitialize(nil);
  if DataModule1 = nil then
     DataModule1 := TDataModule1.Create(Application);  except
 end;
end.function BT_ReadXML(sInput:string;var sOutPut:string;var iDataCount:integer):integer;stdcall;
var
 i,jj: Integer;
 XMLNode, ChildNode, Node1: IXMLNode;
 F :TextFile;
 sFileName:string;
 s,v:string;
 ss,vv:string;
begin
  Result :=0 ;
  jj :=0;
  sOutPut:='|';
  sFileName:='c:\Input.xml';
   try
   DeleteFile(sFileName);
   except
   end;
   AssignFile (F, sFileName);
   ReWrite(F);
   Writeln( F,sInput);
   CloseFile(F); DataModule1.XMLDocument1.FileName := sFileName;
 DataModule1.XMLDocument1.Active := True;
 DataModule1.XMLDocument1.LoadFromFile(DataModule1.XMLDocument1.FileName);
 XMLNode := DataModule1.XMLDocument1.DocumentElement.childnodes.First;
 while XMLNode <> nil do
 begin
   //如果子结点的个数大于1,一直向下遍历
   while XMLNode.childnodes.Count > 1 do
   begin
     XMLNode := XMLNode.childnodes.First;
   end;
   ////如果有水平结点,则读取水平结点的值   if XMLNode.AttributeNodes.Count > 0 then
    begin
      for i := 0 to XMLNode.AttributeNodes.Count - 1 do
      begin
        Node1 := XMLNode.AttributeNodes.Get(i);
      end;
   end
   else
   begin  ////如果没有则直接读取结点的值
     if XMLNode.Nodevalue <> null then
     begin
       s :=s+XMLNode.Nodevalue+'|';
     end
       else
       begin
         s :=s+'|';
       end;   end;
   ChildNode :=  XMLNode;  ////如果该结点的下一个结点为空,则向上遍历,一次
   XMLNode := XMLNode.NextSibling;
   if XMLNode=nil then
   begin
     XMLNode:= ChildNode.ParentNode.NextSibling;
     v :=v+'{'+s+'}';
     jj:=jj+1;
     s:='';
   end;
 end;
  sOutPut :=v;
  iDataCount:=jj;
  DataModule1.XMLDocument1.Active :=False;end;就这个函数,在动态库里,不退出程序,反复调用几次就出现地址错误,有的时候又能调用好多次,,郁闷,,
大家有什么好办法??????
Access violation at address 004f1e6e............

解决方案 »

  1.   

    哎,,,都是string惹的货,在函数传入传出时不能用string类型,要么是widestirng,要么pchar,用string不稳定,已经搞定,大家都来顶下,人多了结贴。
      

  2.   

    呵呵,dll里使用string类型就是给自己找麻烦~
      

  3.   

    dll内部用string倒是没大问题, 但接口函数的参数和返回值一定要慎用string
      

  4.   

    一个string,害的我花了一整天查原因,郁闷呢
      

  5.   

    嘿嘿,为啥不Build with Runtime Package呢?
    可以少很多郁闷,可以多活几年的说,