关于delphi中Dll的问题(50分)

  • 主题发起人 主题发起人 justmejwt
  • 开始时间 开始时间
J

justmejwt

Unregistered / Unconfirmed
GUEST, unregistred user!
delphi中Dll的一个问题:<br>为什么DLL中的函数的返回值是string就是错呢?<br>还有些其它什么限制呢?<br>library MyDll;<br>uses<br> &nbsp;SysUtils,shareMem,Classes;<br><br>Function Max ( X , Y : integer ) : string ; stdcall ;<br> begin<br> &nbsp;if X &gt; Y then<br> &nbsp; &nbsp;Result := 'the max is:'+ inttostr(X)<br> &nbsp;else<br> &nbsp; &nbsp;Result := 'the max is:'+ inttostr(Y) ;<br>end;<br><br>{$R *.res}<br> exports<br> MyMax;<br>begin<br>end.<br>这样就会出错,<br>若是改成<br>Function Max ( X , Y : integer ) : integer ; stdcall ;<br> begin<br> &nbsp;if X &gt; Y then<br> &nbsp; &nbsp;Result := X<br> &nbsp;else<br> &nbsp; &nbsp;Result := Y ;<br>end;<br>就对了真奇怪请高手指点
 
可以使用FastMM补丁:<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=3373649
 
在 delphi 要返回 string 类型必须在 dll 的 uses 中第一个为 shareMem ,同时调用 dll 的程序中的 interface 的 uses 的第一个 也为 sharemem ,记住是第一个 uses<br><br>dll 和 调用程序中都要加 sharemem
 
嘿,动态库中最好不要用string,因为他要用到ShareMM的borlandMM<br>用PChar吧<br>详情请见:《D5开发指南》第9章
 
郁闷,是这个原因啊.那还有其它类型也会出现这个问题吗?<br>而且为了其它语言能用这个DLL,在数据类型的使用上还有哪些值得注意的地方?<br>刚才测试了一下在use里加入了shareMem以后运行的时候没问题但是我退出程序的时候却提示有错.怪了!
 
interface<br>uses SysUtils;<br><br>implementation<br>Function Max ( X , Y : integer ) : string ; stdcall ;<br> begin<br> &nbsp;if X &gt; Y then<br> &nbsp; &nbsp;Result := 'the max is:'+ inttostr(X)<br> &nbsp;else<br> &nbsp; &nbsp;Result := 'the max is:'+ inttostr(Y) ;<br>end;<br>你没有引用SysUtils
 
应该是你在程序里定义函数时未改变类形
 
一般来说就是你的导出函数和过程有字符串或者动态数组参数的话<br>你就改为指针类型最好了哈,一般都用指针就好~~~<br>如果是对象的话就另论了...说多了就
 
TO uiit:能给一下用指针做参数的简单例子吗
 
不能用string类型,用WideString代替
 
考虑到兼容性,最好用pchar
 
多人接受答案了。
 
后退
顶部