求如下三个C语言函数,自己写的函数几次调用返回的值都有点问题,晕了!int FnTest1(char *A,char *B)
int FnTest2(char *A,char **B)
int FnTest3(char *A,char *&B)
A:传入参数,字符串长度不固定(假设是字符串"ABCDEF");B:将A的值加上“GH”返回(需要动态分配和释放内存);函数返回值是B的长度假设将以上三个函数封装成动态库XYZ.dll,则Delphi调用的形式,请给列出,并将B的返回值传到string类型 S;
实现和调用共3对,每对60分,共180分。谢谢!

解决方案 »

  1.   

    程序功能本身实现不难,参数为指针及指向指针和指针引用也都不是问题
    难点在"需要动态分配和释放内存"
    在C程序int FnTest1(char *A,char *B) 中:
    申请内存没有什么问题,什么时候适放是个大问题
    我们在应用中,一般的用法是,在调用DLL前,先申请好内存(B)再调用DLL
    另一方法,自己写内存管理,那就要在调用int FnTest1(char *A,char *B)之后,再调用一个释放内存的函数
    除此以外,我想不出有什么好方法,在dll中申请内存,并能在调用后自动释放
      

  2.   

    int FnTest1(char *A,char *B) 
    一般这类的函数我都会声明成
    function FnTest1(const A:PChar;B:PChar):Integer;
    在调用的时候分配A和B的内存,B一般给个足够使用的大小,一般调用完毕就进行释放.
      

  3.   

    考试题一样,哈哈。就考回试吧。随便谢谢吧,也不知道对不对。过些日子来看结果。const
      C_ADD_STR = 'GH';type
      PPChar = ^PChar;{int FnTest1(char *A,char *B)}
    function FnTest1(const A: PChar; var B: PChar): Integer;
    begin
      Result:= StrLen(A) + StrLen(C_ADD_STR) + 1;  GetMem(B, Result);  FillChar(B^, Result, #0);  StrCopy(B, A);
      StrCat(B, C_ADD_STR);
    end;{int FnTest2(char *A,char **B) }
    function FnTest2(const A: PChar; var B: PPChar): Integer;
    begin
      Result:= StrLen(A) + StrLen(C_ADD_STR) + 1;  GetMem(PChar(B^), Result);  FillChar(PChar(B^)^, Result, #0);  StrCopy(PChar(B^), A);
      StrCat(PChar(B^), C_ADD_STR);
    end;{int FnTest3(char *A,char *&B) }
    function FnTest3(const A: PChar; B: PPChar): Integer;
    begin
      Result:= StrLen(A) + StrLen(C_ADD_STR) + 1;  GetMem(PChar(B^), Result);  FillChar(PChar(B^)^, Result, #0);  StrCopy(PChar(B^), A);
      StrCat(PChar(B^), C_ADD_STR);
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      A: String;
      B: PChar;  C: PPChar;
    begin
      B:= nil;
      A:= 'ABCDEF';
      FnTest1(PChar(A), B);
      ShowMessage(B);  A:= 'ABCDEF';
      B:= nil;
      C:= @B;
      FnTest2(PChar(A), C);
      ShowMessage(B);  A:= 'ABCDEF';
      B:= nil;
      C:= @B;
      FnTest3(PChar(A), C);
      ShowMessage(B);  
    end;
      

  4.   

    To etomahawk: 我想要的是C语言版本的三个函数,不是Delphi地,呵呵,不过也要谢谢你先!
      

  5.   

    我需要的是C版本的!
    如:
    #include <stdio.h>
    #include <string.h>
    int Fntest(char *A, char **B)
    {
        strcpy(*B,A);
        strcat(*B,"GH");
        return strlen(*B);
    }int main()
    {
        char *str="ABCDEF";
        char *buf= (char *) malloc(2+sizeof(str)+1);
        printf("%d\n", Fntest(str,&buf));
        free(buf);
        return 0;
    }
      

  6.   

    我晕,大哥,这里是delphi版,你去c++提问去呀