L larryle Unregistered / Unconfirmed GUEST, unregistred user! 2000-10-26 #2 delphi中的String 与VC中的格式不一样。声明时候需要将参数声明成ansiString. 具体的你在试一试。 larryle
S shincolu Unregistered / Unconfirmed GUEST, unregistred user! 2000-10-26 #3 我自己已经解决。Delphi下的PChar和VC下的char* 对应。
B BaKuBaKu Unregistered / Unconfirmed GUEST, unregistred user! 2000-10-26 #4 必须要注意的是:如果从 DLL 中回传字符串,要计算并手工分配空间。 其他的场合,用 PChar 就可以传递了。 还有,如果是异步的处理,必须注意变量的生存期。
S shincolu Unregistered / Unconfirmed GUEST, unregistred user! 2000-10-26 #5 To BaKuBaKu:你提醒得很对,可是我在调用之前根本就没法知道返回的字符串会有多长, 我现在不是特别清楚怎么样分配空间。如果在调用之前分配空间(不知道该多大);如 果将字符串作为返回值(return)返回,这样在调用之前无需分配空间,但要求在Dll函数 中分配空间,这样是不是会有空间泄漏的危险?谢谢!
To BaKuBaKu:你提醒得很对,可是我在调用之前根本就没法知道返回的字符串会有多长, 我现在不是特别清楚怎么样分配空间。如果在调用之前分配空间(不知道该多大);如 果将字符串作为返回值(return)返回,这样在调用之前无需分配空间,但要求在Dll函数 中分配空间,这样是不是会有空间泄漏的危险?谢谢!
S StrayBear Unregistered / Unconfirmed GUEST, unregistred user! 2000-10-27 #6 首先在动态连接库里开辟内存空间,存放你要返回的字符窜,返回的是内存的地址, 然后在动态连接库里做一个函数用于释放内存。实例: 动态连接库程序: void returnstring(char *p) { p = new char[ 任意数]; . . . return; } void freemem(char *p) { if(p) delete p; } 在delphi中,调用完第一个函数后并处理完后,马上调用freemem释放内存.
首先在动态连接库里开辟内存空间,存放你要返回的字符窜,返回的是内存的地址, 然后在动态连接库里做一个函数用于释放内存。实例: 动态连接库程序: void returnstring(char *p) { p = new char[ 任意数]; . . . return; } void freemem(char *p) { if(p) delete p; } 在delphi中,调用完第一个函数后并处理完后,马上调用freemem释放内存.