100分问题:用Delphi编 DLL 时使用String作为参数会出现的问题!!(100分)

  • 主题发起人 主题发起人 Lica
  • 开始时间 开始时间
L

Lica

Unregistered / Unconfirmed
GUEST, unregistred user!
[?]用Delphi编 DLL 时使用String作为参数时会出现“非法指针”的错误。
则使是最简单的Function也会:
Function aaa(str:string):string;stdcall;
begin
result:=str;
end;
注:已在Uses中加入ShareMem单元(第一个)
 
还要在你发布的机器上放一个内存管理的动态库
 
改用pchar用一切OK啦
Function aaa(str:pchar):pchar;stdcall;
begin
result:=str;
end;
 
1.象楼上说的,用PChar代替string(或者用ShortString代替也可以)
2.还是使用String,但在dll.pas文件中加入uses ShareMem
 
uses ShareMem的话
在使用者的单元中也要uses ShareMem
 
最好使用pchar,保持和c的良好兼容。
 
强力推荐pchar
 
PChar或WideString——不能用ShortString
 
参数中用Pchar,里面可以用String,用strPas转换。
 
dll 接口、参数,不推荐使用 string or 动态数组,
推荐使用pchar,用了string ,就要 uses ShareMem,
发布的时候还一定要发布那个什么 borlandmm.dll。
 
没错是可用PChar代替,但我是想用String,我在DLL单元及使用单元中已加入
Uses sharemem,但不是出错,请各位自行测试测试。(注:使用ShortString代替是
可以的,但为什么用String不行呢?)
 
在你的dll 的preject 中 加uses sharemem ( 一定要在users 的第一引用单元)
例如
uses
sharemem(必须放在这里), sysutils,windows......

其实你自已不注意, 当你新建 一个dll 时. 在 unit 中有一段提示上面有有关string 参数的提示
 
to:chshanghai
》在你的dll 的preject 中 加uses sharemem ( 一定要在users 的第一引用单元)
》 例如
》 uses
》 sharemem(必须放在这里), sysutils,windows......
我已是这样做了
 
还问个屁呀,告诉你PCHAR就是PChar啦,那么多人都回答了你还发言,不相信别人就别问了!
不要以为换成PChar是个多么麻烦的问题,其实也就是Pchar(string)这么简单!
 
发布的时候还一定要发布那个什么 borlandmm.dll
 
贴出你的代码看看
 
to Lica;
你的工程文件中也加了吗?
 
pChar类型才是兼容的
 
多人接受答案了。
 
后退
顶部