请问从Dll中返回字符串值最保险的办法是什么呢?我是这样做的,function GetStrings: Pointer;stdcall;
var
strResult: String;
begin
.....
strResult := 'Hello';
..... Result := PChar(strResult);end;
可是不太稳定,有时返回的值后面有乱码,请问是什么原因?
var
strResult: String;
begin
.....
strResult := 'Hello';
..... Result := PChar(strResult);end;
可是不太稳定,有时返回的值后面有乱码,请问是什么原因?
解决方案 »
- 单元引用问题
- delphi如何定义动态数组??
- 寻求合适的表格控件。具体要求见内容!
- 提供一个Delphi 2006和2005的免费下载地址
- 求救 在DLL中包含ADO组件
- 各位老大,怎么用indy 的 idUdpServer 和client组件做一个服务器和多用户的实时交互程序?
- 在BDE中怎样不用别名去访问数据库
- 一个简单的问题..(在线等待)
- Delphi7.0+Office2003+winXP,无法调用EXCEl!
- -高分-请教哪里有hide folders 的注册机?
- 如何把excel表user.xls中数据(金额,交费时间)更新到sql server ,info表中
- 介绍各地软件公司情况的红黑榜网站已做好,想转工的网友不能错过。
var
strResult: String;
begin
.....
strResult := 'Hello';
..... AChar := PChar(strResult);end;
function GetStrings(var AChar: PChar): Integer;stdcall;
var
strResult: String;
begin
.....
strResult := 'Hello';
..... AChar := PChar(strResult);end;返回的 Integer 是对的,可是我返回的AChar有时就有乱码?为什么呢?
还有就是在这儿定义 PChar和Pointer有什么区别呢?
他有时就能返回 '123 '不知道123的后面是什么东东,我在调用程序里调用该函数后给Text1赋值,如:dim a as integer
dim b as string
b = ""
a = GetStrings(b)text1.text = b & "|||"
MsgBox aa返回的数字没有问题,可是b返回来的值就不稳定了,
我想让他返回“123”可是在Text1里有时会显示123,正确的应该是“123|||”,不知道为什么?
var
strResult: String;
begin
.....
strResult := 'Hello';
..... Result := PChar(strResult);end;
这是一个对象生存期的问题,strResult是你在该函数内部声明的,该函数结束后就不能够保证该对象的有效性了(因为该对象指向的内存有可能被其他程序重新写入),这时就有可能出现乱码了,解决的办法一个使用静态声明(象C++那样),一个就是声明一个指针,然后分配空间,在调用Dll的外部程序中再去释放该内存即可