在DLL中使用 String 类型有什么弊端吗?(100分)

  • 主题发起人 主题发起人 Tintin
  • 开始时间 开始时间
T

Tintin

Unregistered / Unconfirmed
GUEST, unregistred user!
是这样的,我在写技术方案,计划在开发是将每个业务功能做成一个DLL插件,可是现有的开发人员的水平一般,我不可能禁止他们使用String类型,可是Borland说如果要在DLL中使用String 类型必须将他们的管理内存
分配的单元Sharemem引入并且在发布的时候必须连带BORLNDMM.DLL一并发
布,以前我写DLL都是用PChar的(COM DLL 除外)没有做过这方面的案例
,不知这样会不会引来什么弊端(譬如程序不稳定)和不良后果,请各位
有经验的大虾给小弟解解惑,谢了先,50大元奉上。
 
string是按堆分配内存的。所以你在开发过程中可能会发现内存泄露。
在线程中很有可能造成问题。(而且不是每次都出,是时不时的出)
改用shortstring就没问题了。
 
谢谢 tanlu
请继续发言,分不够我再加
 
使用 Borlandmm.dll 可以保证内存安全,
而且不光是用在 .DLL 的 String
还有许多类型都能用
 
shortstring可就只有256个字符了,没什么意思了。
我只知道传递参数要用PChar,DLL内部使用string
要出问题我倒是不知道,嗯,不错,学了一招。
 
我想应该没什么问题,如果有,也是只能由Delphi的程序调用。(也许有程序版本的
问题,比如不同的Delphi版本)
 
确实要出问题,这是实践证明了的。
所以Delphi自己也建议不要这样用。
 
还是用pchar好些吧
 
是在传递参数是不要用string,你看错了。
</pre>
If a DLL <font color=red>exports routines that pass long strings or dynamic arrays as parameters or function results</font> (whether directly or nested in records or objects), then
the DLL and its client applications (or DLLs) must all use the ShareMem unit. The same is true if one application or DLL allocates memory with New or GetMem which is deallocated by a call to Dispose or FreeMem in another module. ShareMem should always be the first unit listed in any program or library uses clause where it occurs.
<pre>
 
如果不能用,那你几乎所有控件都不能用!!!!!!!!!
 
其实带就带把,不过25k嘛!
 
BORLAND建议最好用PCHAR,但并不是说用STRING不行了,只不过要附带borland.dll
另外要引用sharemem.pas单元。
 
最好用 PChar, 说不出来
 
>>同意soul的观点,是在dll传参时不要使用
而不是,在程序中不要使用/
 
这个问题我已与xxx进行了激烈的讨论,使用String类型是可以的.
请参见本人的Dll函数库的问题,及其它有关问题,或许对你有帮助!
 
多人接受答案了。
 
后退
顶部