这样的程序,我都是声明一个char数组,定义的指针,在返回后,值就被清除了。外面的程序无法取得返回的结果。such as:char prt[255];

解决方案 »

  1.   

    prt=new char(a value);
      这是什么东西  写错了吧建议写成GetStrFromInt(int value ,char *strPtr)形式  这样在这里就不要考虑释放问题了
      

  2.   

    delete 用来删除new 分配的内存。且这两个关键字必须配对使用。
      

  3.   

    delete[] 用来删除new 分配数组的内存
      

  4.   

    试试在调用该函数之前就分配好空间,而不要在该函数的栈里分配。比如
    MYDLL_API char* GetStrFromInt(int value,char *ptr)
      {
           ...
           ...
            return prt;
        }调用时:
    .....
    char* ptr = new char[];
    ptr = GetStrFromInt(0,ptr);
    ..... 
      

  5.   

    这么基本的错误也不知道,你声明的局部变量prt在函数返回后就不可用了,所以程序要出问题。
      

  6.   

    返回时是越栈操作,因为ptr分配在堆里,
    如果exe和dll都链接到dll的运行期库是没有问题的,但是他们中有一个或者都链接静态链接库,就会出错。
      

  7.   

    雪松朋友您错了,用NEW生成的内存在函数结束后仍然可用(前提是没有用delete 删除)。很多c++问题不能想当然,需要实践才能说话。
      

  8.   

    同意turongguo(无痕雨)
      只是这样这段内存要释放就比较嘛烦了
      

  9.   

    turongguo的做法我认为是对的。因为ptr时函数内部中定义后就用new操作分配空间的。何不先定义,对函数而言是个全局量,函数给把指针赋值后返回后在删去空间(delete)这样空间的分配就不会释放不了了。
      

  10.   

    MYDLL_API char* GetStrFromInt(int value,char *ptr)
      {
          ...
          ...
            return prt;
        }调用时:
    .....
    char* ptr = new char[];
    ptr = GetStrFromInt(0,ptr);
    .....
    if(ptr){delete ptr;}
      

  11.   

    是不是要实现int to string?char intStr[20];
    sprintf(intStr, "%d", intValue);
      

  12.   

    谢谢attackboy(我像是飘在城市的一片尘埃),我忘了释放了。WINDOWS核心编程里有很好的描述,不过我也该复习一下了。
      

  13.   

    建议你使用NEW和来完成此项任务!!
      

  14.   

    天那!我发现这个dll函数没有写错,
    不过要如下这样才能才能获取函数指针....
    typedef char* (* _GetStrFromInt)(int);
    _GetStrFromInt GetStrFromInt;GetStrFromInt=(_GetStrFromInt)GetProcAddress(MyDll,"?GetStrFromInt@@YAPADH@Z");
    参数里的函数名是从vc工具depend里拷贝过来的。
    这是什么原因啊?
      

  15.   

    你要用GlobalAlloc函数申请内存,而不是NEW函数,因为DLL与EXE不在相同的内存空间
      

  16.   

    哦,原来和内存分配没有关系.是不是MYDLL_API没有定义为extern "C"?我这么写的函数,VC6编译通过,能通过直接调用函数名调用GetStrFromInt.别忘了要在同一模块之中释放.#define MYDLL_API extern "C" __declspec(dllexport)
    MYDLL_API char* GetStrFromInt(int value)
      {
          char *prt=NULL;
           prt=new char[10];
           return prt;
        }
    MYDLL_API char* FreeStr(char *ptr)
    {
    if (ptr)
    {free ptr;ptr=NULL;}
    return ptr;
    }