虽然我对VC,VB不太了解,但有一点是肯定的,Borland并没有公布String类型的具体实现。
因此在DLL中只能用PChar做为参数。可以,将其指向空。(nil)

解决方案 »

  1.   

    关于第一个问题,在VC中可使用CString类,VB中有String数据类型。
    关于第二个问题由于不熟悉Delphi,无法回答。
      

  2.   

    2: 参数有缺省值的条件是,其类型须是可计数(Cardinal)类型,
       包括Boolean,Byte,Smallint,Integer,Word等和枚举类型。
      

  3.   

    1、用Delphi编写DLL,如果VB、VC++等想调用,必须使用PChar类型。String是一个挺有意思的类型,引进它主要是为了解决内存泄露的问题,有点类似VC++中的CString类型。给你两个API希望对你有所帮助:
    function GetStrAllocSize(const S: string): Longint;
    var
      P: ^Longint;
    begin
      P := Pointer(S);
      Dec(P, 3);
      Result := P^ and not $80000000 shr 1;
    end;function GetStrRefCount(const S: string): Longint;
    var
      P: ^Longint;
    begin
      P := Pointer(S);
      Dec(P, 2);
      Result := P^;
    end;2、Jean说得不对,肯定是可以的,例如声明:
    procedure DeleteMe(const id: Integer; PBuff: PChar = nil);
    用DeleteMe(0)和DeleteMe(0, APointer)都可以调用。
      

  4.   

    1. DELPHI中的String(即BCB中的AnsiString) 在vc和vb没有对应结构。
    VC 中的CString 和 VB 中的String 也是两码事。
    在COM中较多使用的BSTR用于参数传递。BSTR即Basic String 是为了照顾VB。
    Delphi和BCB 可以使用WideString 来实现BSTR。
    2,PChar 作参数时可以有缺省值,如Lin 所说。
      

  5.   

      PChar不能有字符串缺省值是肯定的,不过这完全可以通过其它方法来解决,如增加一个整型的参数就可以很容易解决问题。Windows API中基本上每一个PChar参数后面都跟着一个count参数。
      

  6.   

    第二个问题我赞同Lin的看法
    第一个问题
      在标准的Pascal中,string类型式如此定义,
      var
        aString :string;
      aString[0]是字符串的长度,字符串以'$'字符结尾
    但是Delphi中好像做了改动,我在delphi中定义了一个字符串变量,然后跟踪内存地址,发现这个字符串是以NULL结尾。
      

  7.   

    1:STRING类型在VC,VB中有无对应类型,(不考虑PCHAR)
    为什么不考虑PChar??delphi中dll使用string,help中写的很清楚.
    delphi中的string使用引用计数和copy-on-write所以做到dll中比较麻烦.