大家好:
     我用Delphi 开发的动态连接库a.dll,想让它能在VC/VB/PB 环境下调用,请问用delphi开发的这个动态连接库a.dll应该注意什么呢??我开发的这个动态连接库其中有的过程必须返回字符串,请大家给点意见
????我想开发一个能被其他开发环境调用的动态连接库,我应该怎么做啊????????应该注意什么啊 ???????

解决方案 »

  1.   

    Delphi X 开发人员指南 和Delphi X 从入门到精通,有说明,看去吧!
      

  2.   

    必须返回字符串?Win32 API 那么多,楼主见过哪个返回字符串了?楼主应该注意转换思路。
      

  3.   

    返回标准的C类型。例如字符串改为指针(PChar)
      

  4.   

    再寒一个:“我开发的这个动态连接库其中有的过程必须返回字符串”  Pascal 里对于函数、过程,分得很清楚,过程是没有返回值的,可楼主的?扣字眼了。例子:
    function Fool: string;  // 一个返回字符串的函数
    可改成:
    function Fool(pStr: PChar; const BufferSize: Integer): Integer;
    -> 该函数输出一个字符串到 pStr 中。
    // BufferSize = pStr 的大小
    // 返回值 = 输出的字符串的长度
      

  5.   

    函数定义后面要加export; stdcall;

    function Fool(pStr: PChar; const BufferSize: Integer): Integer;export; stdcall;
    implementation
    function Fool(pStr: PChar; const BufferSize: Integer): Integer;
    begin
    ...
    end;
      

  6.   

    大家好:     我已经写好了动态连接库,就是不能在VB和VC 的环境下调用,请问是什么原因,在我的动态连接库中我有的函数必须是返回的字符串型的,。。不懂的不要乱发言。???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????要把问题说到点子上啊 ????
      

  7.   

    Delphi里面的String 类型是Broland自己设计的,不是WinAPI标准,微软不支持,绝大部分工具也不支持,如果想联合开发,就必须采用WinAPI标准的PChar类型,这种类型是以零为结尾的,要在调用前开辟空间,而DLL是无法确认PChar的空间大小的,所以也必须同时传递PChar的长度,你可以去看看Windows.pas这个文件,里面的API声明基本都是这样的。
    另外,函数要用stdcall声明,这样参数传递和堆栈释放才能与WINAPI形成一致的标准。
      

  8.   

    再寒一个。我就不信有必须返回字符串的函数。若楼主能写出来,我就拿脚敲键盘(跟牛人学)。要想在 vc 里用你的那个返回字符串的函数,string 类型怎么对应到 C++ 里?楼主懂,那就说说看啊。
      

  9.   

    至于调用规范(stdcall, cdcall, register),只要匹配就行。Delphi   <----->    VC
    stdcall           __stdcall
    register          __fastcall