100分相送,大侠来看看DLL问题。 String型的问题!uses中加入:ShareMem 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //将string换成PChar或者ShortStringfunction Add(x,y:ShortString):ShortString;stdcall;begin Result:=x + y;end; To:zswang(伴水)(* 嘻 *) 运行没问题了,但是关闭时提示:无效的指示操作。 怎么关闭的,使用了函数吗,将dll释放了吗? To:zswang(伴水)(* 嘻 *) unit Test;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;type TTestfrm = class(TForm) lbledtSs: TLabeledEdit; lbledtRs: TLabeledEdit; lbledtP1: TLabeledEdit; lbledtP3: TLabeledEdit; lbledtP2: TLabeledEdit; lbledtP4: TLabeledEdit; btnRev: TButton; btnAdd: TButton; lbledtRr: TLabeledEdit; procedure btnAddClick(Sender: TObject); private { Private declarations } public { Public declarations } end;var Testfrm: TTestfrm; function Add(x,y:ShortString):ShortString;stdcall;external '.\Xy.Dll';implementation{$R *.dfm}谢谢! //声明要保持一致function Add(x,y: ShortString): ShortString; stdcall; external 'Xy.dll'; Result:=x + y;会不会返回的值超过ShortString呢?建议改用PChar 我也遇到过同样的问题,解决方法有两种:1 用Pchar代替String: 将function Add(x,y:String):String;stdcall;改为 function Add(x,y:Pchar):Pchar;stdcall;2 在DLL和主程序的工程文件中引用ShareMem: 注意:一定要将ShareMem放在USES的首位,否则关闭程序时也会出错! To:zswang(伴水)(* 嘻 *) library Xy;uses SysUtils, Classes, ShareMem;{$R *.res}function Add(x,y:ShortString):ShortString;stdcall;begin Result:=x + y;end;exports Add;begin end.unit Test;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, sharemem;type TTestfrm = class(TForm) lbledtSs: TLabeledEdit; lbledtRs: TLabeledEdit; lbledtP1: TLabeledEdit; lbledtP3: TLabeledEdit; lbledtP2: TLabeledEdit; lbledtP4: TLabeledEdit; btnAdd: TButton; lbledtRr: TLabeledEdit; procedure btnAddClick(Sender: TObject); private { Private declarations } public { Public declarations } end;var Testfrm: TTestfrm; function Add(x,y:ShortString):ShortString;stdcall;external '.\Xy.Dll';implementation{$R *.dfm}procedure TTestfrm.btnAddClick(Sender: TObject);begin lbledtSs.Text:=Add('dasdsad','dsadsadr');end;end. 你在调用DLL的单元中应用了DLL单元了吗Uses Xy uses SysUtils, Classes{, ShareMem}; //不要uses ShareMem就正常了 我现在遇到的问题和zhuig () 一样,望大家帮忙!!!! sql语句 帮忙!如何用程序控制并发读取表的记录??? Delphi 導入 Flash 控件,如何讓它實現透明背景? 能不能做到? 在Quickrep里的QRDBtext如何将它自动换行呀?谢谢…… 如何将一个对象强制转换成一个字符串指定的类型??? 在三层中,客户端用什么组件好,clientdataset?或者其他? 关于记录指针的问题 海量数据SOCKET通讯的探讨,up给分! 请问怎么用HexToBin 我正在下载delhpi5.0 帮助书籍,50m,我手头的事delhpi5.5的安装盘〉。。。 QRBand1.BandType:=rbDetail的问题 HELP!
function Add(x,y:ShortString):ShortString;stdcall;
begin
Result:=x + y;
end;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;type
TTestfrm = class(TForm)
lbledtSs: TLabeledEdit;
lbledtRs: TLabeledEdit;
lbledtP1: TLabeledEdit;
lbledtP3: TLabeledEdit;
lbledtP2: TLabeledEdit;
lbledtP4: TLabeledEdit;
btnRev: TButton;
btnAdd: TButton;
lbledtRr: TLabeledEdit;
procedure btnAddClick(Sender: TObject); private
{ Private declarations }
public
{ Public declarations }
end;var
Testfrm: TTestfrm;
function Add(x,y:ShortString):ShortString;stdcall;external '.\Xy.Dll';
implementation{$R *.dfm}谢谢!
function Add(x,y: ShortString): ShortString; stdcall; external 'Xy.dll';
建议改用PChar
1 用Pchar代替String:
将function Add(x,y:String):String;stdcall;改为
function Add(x,y:Pchar):Pchar;stdcall;2 在DLL和主程序的工程文件中引用ShareMem:
注意:一定要将ShareMem放在USES的首位,否则关闭程序时也会出错!
SysUtils,
Classes,
ShareMem;{$R *.res}
function Add(x,y:ShortString):ShortString;stdcall;
begin
Result:=x + y;
end;exports
Add;
begin
end.
unit Test;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, sharemem;type
TTestfrm = class(TForm)
lbledtSs: TLabeledEdit;
lbledtRs: TLabeledEdit;
lbledtP1: TLabeledEdit;
lbledtP3: TLabeledEdit;
lbledtP2: TLabeledEdit;
lbledtP4: TLabeledEdit;
btnAdd: TButton;
lbledtRr: TLabeledEdit;
procedure btnAddClick(Sender: TObject); private
{ Private declarations }
public
{ Public declarations }
end;var
Testfrm: TTestfrm;
function Add(x,y:ShortString):ShortString;stdcall;external '.\Xy.Dll';
implementation{$R *.dfm}
procedure TTestfrm.btnAddClick(Sender: TObject);
begin
lbledtSs.Text:=Add('dasdsad','dsadsadr');
end;end.
Uses
Xy
SysUtils,
Classes{,
ShareMem}; //不要uses ShareMem就正常了