一个最低级而急需解决的问题

RobertLubj 2000-03-17 12:52:00
各位大虾:
今天我碰到一个奇怪的问题,:
我事先做一个动态库,在Delphi环境下调试程序时调用它一切正常,但脱离该环境运行时却发现我的调用程序没有反应了,于是我将动态库中Form的Visible属性均设为True,
再调用时,虽然有了反应但却报了错!不知是何故,望各位大虾不吝指教!

lubangjian
...全文
165 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lin 2000-03-17
  • 打赏
  • 举报
回复
To lubj:
同意929和kxy的意见.
在Delphi中, String的类型有些奇怪. 虽然它也是个指针,但是,除了字符信息外, 还有其他附加信息, 如长度, 引用计数等. 请看下面内容:

function GetStrAllocSize(const S: string): Longint;//字符串长度,相当于Length函数
var
P: ^Longint;
begin
P := Pointer(S); // pointer to string structure
Dec(P, 3); // 12-byte negative offset
Result := P^ and not $80000000 shr 1; // ignore bits 0 and 31
end;

function GetStrRefCount(const S: string): Longint;//字符串的引用计数, 若为0, 该String将被释放掉.
var
P: ^Longint;
begin
P := Pointer(S);
Dec(P, 2);
Result := P^;
end;

所以, 在如果需要输出函数时, 强烈推荐使用PChar类型!
Firing_Sky 2000-03-17
  • 打赏
  • 举报
回复
在dll中用到strings,好像还需要另外一个动态库的支持
929 2000-03-17
  • 打赏
  • 举报
回复
我想在程序中还包括FORM1释放内存的操作。
用try
...//把你的TRY。。EXCEPT语句括住

finally
form1.free;
form1=nil
end;
另外在生成(CREATE)时,可传入值APPLICATION而不用NIL。(不是必须,但可以)
kxy 2000-03-17
  • 打赏
  • 举报
回复
string这种类型用在dll中很麻烦,可以看delhi help
out这个东西我一直没有明白。
如果我写,我会这样。
function getvalue(aa:PChar):boolean;
aa的内寸分配与释放在调用过程中处理。

RobertLubj 2000-03-17
  • 打赏
  • 举报
回复
我的代码与以下内容有点象:
function getvalue(out aa:string):boolean;
begin
try
form1:=Tform1.create(nil);
//将aa赋给某一对象
form1.showmodal;
if form1.modalresult=mrok then begin
aa:=edit1.text;
result:=true;
end
else
result:=false;
except
result:=false;
//报错
end;
end;



lubangjian



929 2000-03-17
  • 打赏
  • 举报
回复
请详细说明。 DLL的功能,返回值,参数类型。如何调用的。
kxy 2000-03-17
  • 打赏
  • 举报
回复
代码?可以mail to kxy@csdn.net

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧