各位大侠,我想用DELPHI做一些DLL供其他应用程序(不一定是用DELPHI开发的)用,
请问如下的函数编译成DLL后是否符合WIN32的规范,即是否可被任何WIN32应用
程序所调用。
先谢谢!  function my1(pS,pS1:PChar):PChar;stdcall;
  var vS,vS1,vResult:String;
  begin
    vS  := pS;
    vS1 := pS1;
    // 在这儿对vS,vS1进行任何可能的操作
    vResult := vS + vS1;
    Result := PChar(vResult); // 返回操作后的结果
  end;

解决方案 »

  1.   

    工程源文件中出现在uses子句中的Sharemem单元和加载插件文件的代码。任何在自身与子DLL之间传递字符串参数的应用程序都需要Sharemem单元,它是DelphiMM.dll(Delphi提供该文件)的接口。要测试这个外壳,需要将DelphiMM.dll文件从Delphi\Bin目录复制到path环境变量所包含的路径或者应用程序所在目录中。发布最终版本时也需要同时分发该文件。
      

  2.   

    也就是在主程序中
    program PlusPro;uses
      Sharemem,      //引用Sharemem.pas单元     
      Forms,
      PlusUnit in 'PlusUnit.pas' {frmMain};{$R *.res}--------------
    Dll中
    uses
      Sharemem,           //引用Sharemem.pas单元   
      SysUtils,
      Classes,
      Main in 'Main.pas';
      

  3.   

    TO:Dlwxn(流云) 
    这位大侠说的对。
    在用DELPHI开发DLL和应用程序时,可以在DLL和应用程序的工程文件中引用Sharemem.pas
    单元来达到String串在DLL和应用程序间的互传。我想借问一下,用DELPHI开发的DLL怎么才能被其他任何win32开发应用程序所调用,而不
    存在什么String串传递参数时出现问题?
      

  4.   

    不好意思,看错题目了。通常,DLL中的函数可以使用任何类型的参数,并返回任何类型的值。但也有例外:如果计划从其它编程语言中调用DLL,就应该使用Windows原数据类型代替Delphi的特殊类型。。为了兼容的需要,应该避免使用其它的Delphi类型包括对象(根本就不能使用),PASCAL字符串(可以由PChar字符串代替)。换句话说,每个Windows开发环境都必须支持API的基本类型。如果遵守这一点,建立的DLL就可以用于其它的开发环境。下面的代码,使用了输入与输出PChar缓冲区,与任何Windows开发环境相兼容:
    function PCharWithPad(BufferIn,BufferOut:PChar;len:integer):LongBool;stdcall;
      

  5.   

    TO:Dlwxn(流云) 
    这位大侠,能否给我一个简单的例子。要求如下: 返回的字符串的长度只可能在DLL中知道,在调用程序中不可能知道,怎么做?
    function my1(pS,pS1:PChar):PChar;stdcall;
      var vS,vS1,vResult:String;
      begin
        vS  := pS;
        vS1 := pS1;
        // 在这儿对vS,vS1进行任何可能的操作
        vResult := vS + vS1;
        Result := PChar(vResult); // 返回操作后的结果
      end;
    形如上面的函数可否实现?盼赐教!
      

  6.   

    dll就用pchar,用string的话还要一个DelphiMM.dll多麻烦?