--== DLL和Pchar 急! 在线恭侯 ==--(100分)

W

wanbb

Unregistered / Unconfirmed
GUEST, unregistred user!
我的DLL中有个函数: Function T(a:pchar
out b:pchar):integer;
其中a是调用者给的数据,b是我的DLL返回给调用者的数据
[red]我想问a是否要分配内存及释放?[/red]
还有我的b是这样的:
Function T(a:pchar
out b:pchar):integer;
var S:string;
begin
S:='983hsdouasdhfiehf8er7hwi'
//可能有很长的字符(26000)是否可以呢?
b:=AllocMem(Length(S)+1);
b:=strpcopy(b,S);
freemem(b);
Result:=0;
end;

可以调用运行,但是我发现去掉freemem(b)这句才能正常显示出数据,而加上后就是乱码,
我想我要的数据在b指向的地址里,但又freemem(b)了那当然就没有数据了,可是在DLL中用了
Pchar就要分配内存,我该怎样将b传出去呢? 请高手解答 谢谢!
 
和DLL通讯最好不要用GetMem或者AllocMem函数,用HeapAlloc()比较好
对于给DLL的变量,由调用函数的人清除掉。。。你自己分配的内存自己
清除...
 
out b
最好让调用者把B初始化好,即分配空间的活不要由你来做.
多传一个参数为调用都分配的空间大小,进来后检查一下,如果不够,让调用者重新分配,
这样你就不用再为内存的分配与释放操心了.
 
可B是S的内容,而我是已经知道了S的长度的,还有S的长度最大是多少呢?
 
a和b都应当是调用者传进来的变量,你这么做不是自找麻烦吗?
 
to driver: 那应该怎么做? 请指教
 
我个人认为:
如果主程序和DLL之间要交换的数据(不论是字符串还是其它的什么类型的数据)比较少,比如:
要传递的字符串一、二百个字符,那么可以通过函数的参数和返回值来传递;反之,如果数据量
比较大,最好是用“内存映射文件”或发送WM_COPYDATA消息的方法来完成。
你的程序到底是哪种情况呢?
 
有可能数据会多,但我不懂“内存映射文件”或发送WM_COPYDATA消息, 能具体说说吗? 谢谢
 
有关“内存映射文件”或发送WM_COPYDATA消息,看看这两篇文章,不太难
http://cn.tech.yahoo.com/021021/31/1abgg.html
http://jinjohn.myrice.com/program/delphi/wtj/DELPHI002.htm
 
顶部