为什么DLL出错??,急呀!!(Access Violation at address 002B7F56 in module 'calbom.dll',read of address '0000005C')

zfzhou 2002-09-18 10:03:11
DLL内容:
library calbom;

uses
ShareMem,
SysUtils,
DB,
ComCtrls,
Classes,
QDialogs,
BomDataMoudle in '..\BomDataMoudle.pas' {DataModule1: TDataModule};

{$R *.res}

Procedure expand(itname:Pchar;bomview:TTreeView);StdCall;
Begin
//程序中有调用ClientDataset
End;

Exports
expand;

begin
end.


调用DLL的程序如下:
unit BOMAdd;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ComCtrls, ExtCtrls, DBCtrls, Mask, Grids,
DBGrids,DB;

type
TBom_Add = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;
TItem: TEdit;
SBS1: TSpeedButton;
SBR1: TSpeedButton;
Label2: TLabel;
TDp: TEdit;
BOMTree: TTreeView;
procedure SBS1Click(Sender: TObject);
procedure BOMTreeClick(Sender: TObject);
procedure BOMTreeDblClick(Sender: TObject);
procedure SBR1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Bom_Add: TBom_Add;

implementation

uses BomDataMoudle;
Procedure expand(itname:Pchar;bomview:TTreeView);StdCall; external 'calbom.dll';

{$R *.dfm}

procedure TBom_Add.SBS1Click(Sender: TObject);
var
Str:String;
test:Pchar;
Begin
With BOMDM.C310 Do
Begin
close;
str:='Select item,part,unit,levels,begins,ends,Scrap From s310 Order by item,part';
commandtext:=str;
open;
End;

With BOMDM.C310S Do
Begin
close;
str:='Select part,keys,um,dp,line from s130 Order by part';
commandtext:=str;
open;
End;
test:=pchar(trim(TItem.text));
expand(test,BOMTree);
end;
...全文
164 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zfzhou 2002-09-19
  • 打赏
  • 举报
回复
帮个忙吧,怎么办
zfzhou 2002-09-18
  • 打赏
  • 举报
回复
哦,哪怎么办,给个解决方案吧,不过下午我好象做出来过一次呢
liang_z 2002-09-18
  • 打赏
  • 举报
回复
不能用控件作为DLL中函数的参数,
并在函数中修改这个控件的内容!
zfzhou 2002-09-18
  • 打赏
  • 举报
回复
我将DLL的函数,改写在调用的程式里变成一个函数,可以调用啊
怎么办
zfzhou 2002-09-18
  • 打赏
  • 举报
回复
DLL里函数的代码是从我调用程式的位置COPY过去的呀,
我如果不用DLL的话,将函数里的代码放到调用DLL 的位置是正常的呀
1FCSOFT 2002-09-18
  • 打赏
  • 举报
回复
你测试你的函数了么?
zfzhou 2002-09-18
  • 打赏
  • 举报
回复
当然是一致啦
1FCSOFT 2002-09-18
  • 打赏
  • 举报
回复
是不是你的动态连接库部分本身有问题么,你是不是测试过了,另外你引用的动态连接库函数的大小写一致么?
zfzhou 2002-09-18
  • 打赏
  • 举报
回复
楼上兄台,按你说的方式,但是会发生灾难性故障啊?,怎么办
jxk 2002-09-18
  • 打赏
  • 举报
回复
Procedure expand(itname:Pchar;bomview:TTreeView);StdCall; external 'calbom.dll';

这里stdcall要改成safecall

dll里面的stdcall也要改成safecall
zfzhou 2002-09-18
  • 打赏
  • 举报
回复
好象还是不行啊,怎么办
nj_wangzhen 2002-09-18
  • 打赏
  • 举报
回复

在工程文件的uses后第一个位置加上sharemem(记住是工程文件)看看能不能解决
program Project1;

uses
sharemem,
Forms,
Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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