在dll中定义一个函数:
int getAll(int& iTime,char* str)
{
    改变了iTime的值和str的内容
}delphi中:
function getAll(var iTime:Integer;str:PChar):Integer;stdcall;external 'mydll.dll'
为什么我调用之后,只有iTime可以取到改变后的值,而str不行?
我试过定义为 var str:PChar也不行。

解决方案 »

  1.   

    函数定义基本没错,可能有两个问题
    1.由于C的缺省调用方式为cdecl的,如果原C函数没有特别的申明,改stdcall为cdecl试试
    2.估计str要在你的程序中申请内存,先用GetMem试试(除非你调入的是array[0..xxx] of char)
      

  2.   

    多谢,
    我试了一下:
    ,改stdcall为cdecl后效果没有改变。我是在dll中给str分配内存的,这样行不行?
    在delphi中我只用一个PChar变量传进去
      

  3.   

    我使用VC编译的DLL,调用约定为:__cdecl (/Gd)
    __declspec(dllexport) int ...在delphi中。
    var
    p: PChar;
    i: Integer;
    ...
    getAll(i,p);
      

  4.   

    现在找到问题了,的却如keiy() 所说,要预先分配内存,才可以。请问我怎么样才可以在dll动态分配内存呢?
      

  5.   

    在dll中申请内存不是不可以,但一般不推荐使用
    如果要在DLL中申请内存,你就要传二维指针或指针引用:
    int getAll(int& iTime,char* &str)

    int getAll(int& iTime,char* *str)
    在D中要用var str:PChar