当dll使用静态RTL时关于内存管理的重要说明--BCB中

王朝other·作者佚名  2006-01-09
宽屏版  字体: |||超大  

//---------------------------------------------------------------------------

// Important note about DLL memory management when your DLL uses the

// static version of the RunTime Library:

//

// If your DLL exports any functions that pass String objects (or structs/

// classes containing nested Strings) as parameter or function results,

// you will need to add the library MEMMGR.LIB to both the DLL project and

// any other projects that use the DLL. You will also need to use MEMMGR.LIB

// if any other projects which use the DLL will be performing new or delete

// operations on any non-TObject-derived classes which are exported from the

// DLL. Adding MEMMGR.LIB to your project will change the DLL and its calling

// EXE's to use the BORLNDMM.DLL as their memory manager. In these cases,

// the file BORLNDMM.DLL should be deployed along with your DLL.

//

// To avoid using BORLNDMM.DLL, pass string information using "char *" or

// ShortString parameters.

//

// If your DLL uses the dynamic version of the RTL, you do not need to

// explicitly add MEMMGR.LIB as this will be done implicitly for you

当dll使用静态RTL时关于内存管理的重要说明:

如果你的dll提供了参数中或返回值中有String对象(或包含String对象的类或结构体)

的输出函数,你必须加载MEMMGR.LIB到你的dll工程及调用dll的工程。

还有,如果调用dll的工程new或者delete了任何该dll提供的非TObject子孙类,也需要加载MEMMGR.LIB。

加载MEMMGR.LIB会使得dll及其调用者使用BORLNDMM.DLL作为他们的内存管理器。

所以,你需要把BORLNDMM.DLL和你的dll放在一起发布。

改用“char *”或者ShortString做参数可以避免BORLNDMM.DLL的使用。

如果你的dll使用动态RTL,你不需要显式的加载MEMMGR.LIB,BCB隐式的为你做了此工作。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有