在程序中调用有VB本身的Dll,还有调用Delphi所写的Dll(fastreport报表),在编辑代码的情况下运行程序,没有任何问题.
但在编译完程序,执行此Exe,并在运行时显示了报表的情况下,在结束程序后出现下面的三条错误信息.---------------------------
Access violation at address 0018AF50. Write of address 45A5AAE4.
---------------------------
应用程序发生异常 未知的软件异常 (0x0eedfade), 位置为 0x77e6f142 。
---------------------------
Runtime error 217 at 046FE4BA
---------------------------(我在程序执行end之前用
err.Description    ]
Err.Clear    
End
也不起作用.)请高手帮忙了!谢谢!

解决方案 »

  1.   

    这个是非法内存访问的错误,你用err没有的。你尝试一下更改一下编译方式为P-Code看看(在菜单的 Project | Project Properties 里面的Complie里面更改)
      

  2.   

    还有,我说错了,在
    '***********
    在程序中调用有VB本身的Dll,还有调用Delphi所写的Dll(fastreport报表),在编辑代码的情况下运行程序,没有任何问题.
    '**************
    在退出VB时,也出现了错误.
      

  3.   

    to : TechnoFantasy(www.applevb.com) 照您说的做,还是有错误出现.'***********************************
    另外,我的调用是这样的
    主程序调用VB写的DLL,在这里面的程序界面中再调用Delphi写的dll(report),我在调试VB写的Dll时调用Delphi写的dll,是不会出错的.
      

  4.   

    /********************************************************************
    回复人: somecom(somecom) ( ) 信誉:100  2003-12-06 21:29:00  得分:0  
      编为本机号码时,,,选择无优化,,试试,,,
    /********************************************************************谢谢,但还是不行.
     
     
      

  5.   

    这个错误应该是Delphi的Dll产生的。
    应该检查一下Pascal的代码。
      

  6.   

    在不执行下面这段代码时
    procedure TMain.BtnInStortClick(Sender: TObject);
    var
      Report: TfrReport;
    begin
        QeInStort.Close;
        QeInStort.SQL.Clear;
        QeInStort.SQL.Add(Strsql);   //由VB调用时传入的查询字串.
        QeInStort.open;
        frReport1.Dataset :=DSInStort;
        Report := frReport1;
        Report.LoadFromFile('C:\LJReport\Instort.frf');
        Report.ShowReport;
    end;
    都不会出问题,也就是说我可以进入选择报表的界面当中,但只要不显示报表,都是没有问题的.但这段代码会有什么问题呢???
      

  7.   

    我在VB中是这样声明的:
    Public Declare Function GetReport Lib "C:\LJDLL\LJ_Report.dll" (ByVal OperatorType As Integer, ByVal StrCon As String, ByVal StrUserID As String, ByVal StrTitle As String, ByVal StrPath As String, ByVal strsql As String) As Integer
    使用如下:
    If GetReport(1304, cSysConnect, cUserID, cSysTitle, SysPath, strsql) Then
        MsgBox "OK"
    Else
        MsgBox "Error"
    End If
    并没有特地去注册,要怎样注册才行呢?另外我在Delphi中也开了一个贴子,还有些情况我在那边说了.请大家看一下:
    http://expert.csdn.net/Expert/topic/2536/2536579.xml?temp=.1931726
      

  8.   

    你的提问引起了我的好奇,花了一个小时写了一个简单的例子,还行.Delphi6写的fastreport的dllVB6.0,Delphi6,VC6.0 调用该dll,显示dll中FastReport报表,示范动态生成FastReport的内容.楼主的EMail?
    有兴趣的给我留言,留下EMail.
      

  9.   


    借用一下地方啊,谢谢!本人因《混合编程语言》考试需要,需编写一程序演示两种不同语言之间的调用过程。
    问题如下:在vb中调用VC编写的DLL(其中包含一采用冒泡排序BubbleSort实现的排序过程)。
    在VB中通过ByRef传递数组名ArrayName,ByVal传递数组元素个数ArraySize。DLL编译通过,
    我将其拷到VB程序所在文件夹下,程序编译通过,但调用排序过程后,数组中的元素并未进
    行排序???
    DLL采用stdcall调用约定,且在定义文件.def中也已列出BubbleSort过程名.//DLL中的排序函数BubbleSort(已在VC环境下测试完全正确.)
    Sort_API  BubbleSort(int *ArrayName,int ArraySize)
    {
    int i,j,temp; AFX_MANAGE_STATE(AfxGetStaticModuleState());
    for(i=0;i<ArraySize-1;i++)
    for(j=i+1;j<=ArraySize-1;j++)
    if( *(ArrayName+i) > *(ArrayName+j) )
    {
    temp=*(ArrayName+i);
    *(ArrayName+i)=*(ArrayName+j);
    *(ArrayName+j)=temp;
    }

    }
    //VB中DLL声明:Public Declare Sub BubbleSort Lib "D:\Program Files\VB98\自编程序\VbCallDll\Sort" (ByRef                 ArrayName() As Integer, ByVal ArraySize As Integer)//VB中调用代码
        Dim ArrayName(0 To 9) As Integer
        Dim i, ArraySize As Integer
        
        ArraySize = 10
        '测试值
        ArrayName(0) = 19
        ArrayName(1) = 50
        ArrayName(2) = 3
        ArrayName(3) = 18
        ArrayName(4) = 6
        ArrayName(5) = 94
        ArrayName(6) = 24
        ArrayName(7) = 32
        ArrayName(8) = 47
        ArrayName(9) = 58
            
        Call BubbleSort(ArrayName(), ArraySize)
       
        For i = 0 To 9
            Print ArrayName(i)
        Next i    程序运行后,输出结果和上面赋值的情形一样。修改DLL进行测试时发现ArraySize值传递正确,
    问题似乎出现在数组的传递上。
    请赐教,谢谢!
      

  10.   

    zdcnow(磁效应) ( ) 信誉:100 ,按照你说的,不知道VB 是否能调用 c++ builder 写的DLL 呢?
    你的程序可以发给我吗?谢谢。
    wide288 at hotmail dot com
      

  11.   

    看你的描述,应该是运行时错误,也就是DLL中有错误,所以全编译也不会发现错误。
    责任不再VB的调用。
      

  12.   

    是DLL中的問題,但隻調用DLL而不顯示報表時都是沒問題的,難道是ADO??...
    我還在查,也非常感謝zdcnow(磁效应) 及各位的幫助,
    完了就結貼。
      

  13.   

    谢谢各位,我今天终于找到问题了,
    原来是我在报表中使用了Rich edit控件导致的问题.在去掉这个控件之后,一切正常.
    但我还是不明白,我已经在程序的界面上放了frRichObject,为什么还会出这样的问题呢??
    而且问题还只是出现使用VB调用时,这难道是fastreport的一个BUG?????现在写下来,只是对各位帮助过我的兄弟的一个回应!!
    谢谢大家了!明天我就结贴了.