调用Dll产生的问题??高分求解!!!UP者有分!!

johncsdn 2003-12-06 08:07:07
在程序中调用有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
也不起作用.)

请高手帮忙了!谢谢!
...全文
41 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
johncsdn 2003-12-14
  • 打赏
  • 举报
回复
谢谢各位,我今天终于找到问题了,
原来是我在报表中使用了Rich edit控件导致的问题.在去掉这个控件之后,一切正常.
但我还是不明白,我已经在程序的界面上放了frRichObject,为什么还会出这样的问题呢??
而且问题还只是出现使用VB调用时,这难道是fastreport的一个BUG?????

现在写下来,只是对各位帮助过我的兄弟的一个回应!!
谢谢大家了!

明天我就结贴了.




djf1978 2003-12-10
  • 打赏
  • 举报
回复
我也顶一下
ahbbnimor 2003-12-10
  • 打赏
  • 举报
回复
up
aoenzh 2003-12-10
  • 打赏
  • 举报
回复
up
davidlv 2003-12-10
  • 打赏
  • 举报
回复
up
wssqsh 2003-12-09
  • 打赏
  • 举报
回复
up
yangfanatcsdn 2003-12-09
  • 打赏
  • 举报
回复
看你的描述,应该是运行时错误,也就是DLL中有错误,所以全编译也不会发现错误。
责任不再VB的调用。
wide288 2003-12-09
  • 打赏
  • 举报
回复
zdcnow(磁效应) ( ) 信誉:100 ,按照你说的,不知道VB 是否能调用 c++ builder 写的DLL 呢?
你的程序可以发给我吗?谢谢。
wide288 at hotmail dot com
ChengGuiNan 2003-12-09
  • 打赏
  • 举报
回复
收藏
johncsdn 2003-12-09
  • 打赏
  • 举报
回复
是DLL中的問題,但隻調用DLL而不顯示報表時都是沒問題的,難道是ADO??...
我還在查,也非常感謝zdcnow(磁效应) 及各位的幫助,
完了就結貼。
sunbird2002 2003-12-08
  • 打赏
  • 举报
回复

借用一下地方啊,谢谢!

本人因《混合编程语言》考试需要,需编写一程序演示两种不同语言之间的调用过程。
问题如下:在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值传递正确,
问题似乎出现在数组的传递上。
请赐教,谢谢!

JERRY_LIU 2003-12-07
  • 打赏
  • 举报
回复
UP
zdcnow 2003-12-07
  • 打赏
  • 举报
回复
你的提问引起了我的好奇,花了一个小时写了一个简单的例子,还行.

Delphi6写的fastreport的dll

VB6.0,Delphi6,VC6.0 调用该dll,显示dll中FastReport报表,示范动态生成FastReport的内容.

楼主的EMail?
有兴趣的给我留言,留下EMail.
johncsdn 2003-12-07
  • 打赏
  • 举报
回复
/********************************************************************
回复人: somecom(somecom) ( ) 信誉:100 2003-12-06 21:29:00 得分:0
编为本机号码时,,,选择无优化,,试试,,,
/********************************************************************

谢谢,但还是不行.


johncsdn 2003-12-07
  • 打赏
  • 举报
回复
我在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
ahbbnimor 2003-12-07
  • 打赏
  • 举报
回复
up
simanh 2003-12-07
  • 打赏
  • 举报
回复
对,dll的注册
easydone 2003-12-07
  • 打赏
  • 举报
回复
试试将程序打包并安装之后有没有问题!注意相关动态链接库的注册!
johncsdn 2003-12-07
  • 打赏
  • 举报
回复
在不执行下面这段代码时
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;
都不会出问题,也就是说我可以进入选择报表的界面当中,但只要不显示报表,都是没有问题的.但这段代码会有什么问题呢???
dogdogdog 2003-12-07
  • 打赏
  • 举报
回复
这个错误应该是Delphi的Dll产生的。
应该检查一下Pascal的代码。
加载更多回复(5)

7,789

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧