Dll 编写,有关borlndmm.dll的问题。(100分)

G

geluyx

Unregistered / Unconfirmed
GUEST, unregistred user!
我刚编写了一个DLL,要返回string类型的值,只有用了uses sharemem,
并且同时带有borlndmm.dll才不会出错。请问各位大富翁,怎么才能不带有
borlndmm.dll就可以返回string类型的值??
 
使用Pchar类型
 
[red]UP者,加分![/red]
如果要string呢?
 
那就没办法了/pchar是Dll中传递字符串的正确方法!
 
用strig的话就要带mm那
 
使用pchar可能会出现乱码的情况,呵呵。
最后我们还是带上了那个东东。
如果你的string不长,可以改用shotstring也是一样的。
 
>>使用pchar可能会出现乱码的情况
显然是你对pchar类型的使用有问题!
 
有什么问题?愿闻其详。洗耳恭听。
 
怎么没人答啊?各位大富翁们?~~~~~~~~~~~~
 
因为String是Delphi中定义的字符串对象(理解为对象更合适),用该类型传递字符串信息时需要同时传递内存的所属关系,所以调用内存管理器接口(Borlndmm.dll)

使用PChar,ShortString都可以解决这个问题,但使用PChar传递,需要注意正确的分配内存,它传递的实际上只是一个指针,就是内存中的地址!注意不要在DLL中为传出的PChar数据分配内存,这样释放DLL时会出现异常!

正确的做法可以在主程序中为PChar分配内存控件,使用var修饰参数,在DLL中直接修改即可
 
>注意不要在DLL中为传出的PChar数据分配内存,这样释放DLL时会出现异常!
这一点和dll传出对象看来是反的
 
我没有遇到过问题。(pchar 及 string)
没有异常
 
DLL中strin的实现必须必须Borlndmm.dll。写动态连结库我一般用C++。烂Delphi。
 
因为DLL和主程序是不同的分配内存的单元,在DLL中分配的内存和主程序
中虽在同一地址空间,但WIN内部没把它们看做一样了,如DLL被卸下时它
所有的内存都是无效了。
而ShareMM则重设了DELPHI的内存分配器,使程序所有的内存分配都由ShareMM.DLL
所管,所以不会有问题,如一个DLL下去了,它的内存还可由其它模块用。
而且DLL中的对象类信息和主程序也不可共用,即使是同一类,它们的is操作也返回false;
如不考虑其它言语,则可用Package.
 
>即使是同一类,它们的is操作也返回false
原来如此,谢谢
 
borlndmm.dll放在哪里?
是否调用DLL的客户程序也要有这相borlndmm.dll文件?
 
多人接受答案了。
 
Ehomsoft怎么消失了?
 

Similar threads

回复
0
查看
886
不得闲
S
回复
0
查看
962
SUNSTONE的Delphi笔记
S
S
回复
0
查看
784
SUNSTONE的Delphi笔记
S
顶部