在程序中调用有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
也不起作用.)请高手帮忙了!谢谢!
但在编译完程序,执行此Exe,并在运行时显示了报表的情况下,在结束程序后出现下面的三条错误信息.---------------------------
Access violation at address 0018AF50. Write of address 45A5AAE4.
---------------------------
应用程序发生异常 未知的软件异常 (0x0eedfade), 位置为 0x77e6f142 。
---------------------------
Runtime error 217 at 046FE4BA
---------------------------(我在程序执行end之前用
err.Description ]
Err.Clear
End
也不起作用.)请高手帮忙了!谢谢!
'***********
在程序中调用有VB本身的Dll,还有调用Delphi所写的Dll(fastreport报表),在编辑代码的情况下运行程序,没有任何问题.
'**************
在退出VB时,也出现了错误.
另外,我的调用是这样的
主程序调用VB写的DLL,在这里面的程序界面中再调用Delphi写的dll(report),我在调试VB写的Dll时调用Delphi写的dll,是不会出错的.
回复人: somecom(somecom) ( ) 信誉:100 2003-12-06 21:29:00 得分:0
编为本机号码时,,,选择无优化,,试试,,,
/********************************************************************谢谢,但还是不行.
应该检查一下Pascal的代码。
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;
都不会出问题,也就是说我可以进入选择报表的界面当中,但只要不显示报表,都是没有问题的.但这段代码会有什么问题呢???
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
有兴趣的给我留言,留下EMail.
借用一下地方啊,谢谢!本人因《混合编程语言》考试需要,需编写一程序演示两种不同语言之间的调用过程。
问题如下:在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值传递正确,
问题似乎出现在数组的传递上。
请赐教,谢谢!
你的程序可以发给我吗?谢谢。
wide288 at hotmail dot com
责任不再VB的调用。
我還在查,也非常感謝zdcnow(磁效应) 及各位的幫助,
完了就結貼。
原来是我在报表中使用了Rich edit控件导致的问题.在去掉这个控件之后,一切正常.
但我还是不明白,我已经在程序的界面上放了frRichObject,为什么还会出这样的问题呢??
而且问题还只是出现使用VB调用时,这难道是fastreport的一个BUG?????现在写下来,只是对各位帮助过我的兄弟的一个回应!!
谢谢大家了!明天我就结贴了.