正在学习DLL的里面过程与函数的编写,在写过程时若一个变参是PCHAR类型,在调用程序里预先分
配一个PCHAR类型的变量,在调用带参数PCHAR类型的过程就可以了;但在写返回一个PCHAR类型的函数
时,那么空间分配像不该在调用前分配,但在被调用函数里分配吗,暂还搞不清楚。
    希望能够把一个返回PCHAR类型的函数的DLL源码贴出来,使我有个简单的了解。希望该函数越简
单越好,能够说明问题就是。谢谢。

解决方案 »

  1.   

    楼主看来学东西挺认真,这确实需要留意的细节。。
    一般不主张这样返回的,观察WINDOWS API等可以注意到,当要被调用方返回字符串时候,往往是调用方分配空间。。
    调用方分配空间,可以在栈中,也可以在堆中。。要由被调用方分配内存,则只能在堆中,也就是说只能用分配函数动态分配。
    而且,这种情况下,调用方用完后有责任来释放这块内存。
      

  2.   

    有没有一个实例,光说还是不知如何使用。或许我问法有问题,现在问题就是在哪里分配空间的问题。或有实例,可以发俺的邮箱 khkhingat163.com(@ 写成 at)
      

  3.   

    对于反馈值是指针类型(pchar),在函数内创建了一变量pResult作为反馈时使用,在执行了反馈语句以后,然后释放掉pResult变量,调用函数反馈的值变得不确定(每次都不相同),若把释放语句注解掉,反馈结果却正常了。哪么到底应该如何写代码了?若函数执行完以后,不释放指针变量可以吗,该部分占用的资源会释放掉吗?反馈结果不确定的语句:
      Result:=pResult;//反馈内容
      StrDispose(pResult);//释放缓冲反馈结果正常的语句:
      Result:=pResult;//反馈内容
      //StrDispose(pResult);//释放缓冲
      

  4.   

    一般要返回字串时,我是这样写的(C++的方式).
    getString(p:Pchar;nSize:integer);
    调用的时候先分配
    var
       buf:array [0..255] of byte;getString(buf,256);
      

  5.   

    是的 一般不建議直接返回PChar 這樣的指針類型 這樣不夠安全
    一般是采取C風格的 調用方傳入緩沖/指針,dll在裡面進行修改bool Test(char* buf, int nLen)
    or
    function Test(buf: PChar; nLen:Integer): Boolean;
      

  6.   

    但俺暂只在DELPHI里使用,请举DELPHI的例子好吗。