关于动态连接库的设计问题 ( 积分: 100 )

  • 主题发起人 主题发起人 wzquan
  • 开始时间 开始时间
W

wzquan

Unregistered / Unconfirmed
GUEST, unregistred user!
用delphi设计动态连库时,为什么用string类型就会出错
如:function getlinkstr(str1:string;str2:string):string;
在退出程序时显示错误,但程序能正常运行
 
用delphi设计动态连库时,为什么用string类型就会出错
如:function getlinkstr(str1:string;str2:string):string;
在退出程序时显示错误,但程序能正常运行
 
delphi里有这样的说明:
{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }
最好用Pchar传递!
 
uses ShareMem
 
还是用Pchar比较好,用ShareMen的话,有时也会出问题。
 
可能是string类的问题,dll的参数要使用简单的数据类型
 
一般这种都用OleVariant 做为返回类型!
 
建议用Pchar。
 
用wideString ^O^
 
DLL中建议使用PChar类型代替String
 
我试用了pchar,退出程序时也出错。
function getlinkstr(mystr1:string;mystr2:string):pchar;

function getlinkstr(myStr1:pchar;mystr2:pchar):pchar;
 
记得看过这样的介绍,在DLL中好像只能用Integer、Pchar等原形数据类型,不能够使用String等数据类型。
 
這是由於windows系統對返回string類型不支持造成,
你可以改用widestring或則pchar.
還有種方法將function getlinkstr(str1:string;str2:string):string;
改為procedure getlinkstr(var str1,str2,results:string);
說明其中:results用於返回string結果.
老兄試試看,我自己就是這樣做得。
 
用ShortString最简单.
 
就是要用PCHAR或者WideString类型来替换牵涉到输入和输出的String类型,最好不要加Sharemem,因为这个往往会导致内存方面的错误。
 
我测试一下,测试成功了我就散分。
 
用Pchar类型代替String,返回后用StrPas函数处理成String
 
明月几时有 说得对
就是要用PCHAR或者WideString类型来替换牵涉到输入和输出的String类型,最好不要加Sharemem,因为这个往往会导致内存方面的错误。
 
后退
顶部