bcb动态库传递 string 参数问题
在 BCB中将string参数传递给动态库时,string参数的长度大于128时出现异常,用devcpp没有这种现象,不知道是什么原因?怎么解决啊?
[解决办法]
楼主可以去查看下以前的帖子
都提出了好多遍说在DLL中,参数不要使用String类型(DLL的主文件注释都有说明了),而应该使用char*传递,并且确保char*的内存在调用的一方分配
[解决办法]
由于AnsiString是VCL中的类,所以在用在DLL接口的时候,必须要求MEMMGR.LIB库的支持。这个库是Borland的静态库。
[解决办法]
是这样的,DLL开头一般都有说明
// 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.
[解决办法]
建议使用fastmm,这样就简单多了,可以直接传
[解决办法]
fastmm是什么东东??
找来看看先
[解决办法]
c++本来并没有STRING,STRING是一个类,可以理解为char的指针,在C和C++的DLL中传递STRING用char*
[解决办法]
如果dll是bcb编译的,我没有经验,不过多半应该没有问题。
如果dll是其他编译器编译的,而用bcb来调用,那么不能在接口中传递类参数,参数或返回值都不行,因为他们在编译的时候对类内存的分配是不一样的,比如虚函数表。
[解决办法]
如果參數用的是std::string,編譯DLL及調用DLL都該使用同一版本的編譯器才行。
用char * 才具有通用性。std::string不存在限制128個字符的問題。
[解决办法]
佩服PPower(月亮光光,照地堂) 的专业 :)
[解决办法]
我刚才试了一下,确实有楼主所说的问题,呵呵