用VC编了一个dll,其中有个函数:
int  __stdcall   Read(LPSTR   ReadData)
{
   ReStr[0]='a';
   ReStr[1]='a';
   ReStr[2]='a';
   ReStr[3]='a';
   ReStr[4]='a';
   ReStr[5]='a';
   strcpy(ReadData, ReStr); 
}
在应用程序中调用该DLL中的Read函数,方法如下:
方法一:
   char ReStr[]="1111111";
   int a;
   a=Read(ReStr);
编译没问题,执行时说内存不可为“writed”!
方法二:
  char *ReStr;
  memset(ReStr,0,sizeof(ReStr));
  int a;
  a=Wln_ComPlc_Read(ReStr);
同样出错!同样的错误!以上dll,我在VB中调用,方法:
Dim strs As String
strs = Space$(6)
aaa = Read(strs)
一切正常。
那位高手指点一下迷津,不甚感激。

解决方案 »

  1.   

    ReStr 内存在哪里分配的?
      

  2.   

    char ReStr[]="1111111";
    int a;
    a=Read(ReStr);
    自己拷贝给自己?????
      

  3.   

    两种方法,均有错误,相同点是未分配可写内存。
    方法1中,char ReStr[]="1111111";  "1111111"本身是一个常量字符串。
    方法2中,char *ReStr;memset(ReStr,0,sizeof(ReStr));ReStr指针未初始化,memset就能导致内存乱掉。正确的用法,应该是
    char* ReStr = new char[目标大小];
    Read(ReStr);delete[] ReStr;或者
    int nSize = 足够大的字节数
    char ReStr[nSize]; memeset(ReStr, 0, sizeof(char)*nSize);Read(ReStr);
     
      

  4.   

    char ReStr[]="1111111";//这种分配的是常量,不能改变内存的值的
      

  5.   

    char *ReStr;
    memset(ReStr,0,sizeof(ReStr));没分配就写,看来你还不懂什么是指针啊
      

  6.   

    你dll里面的ReStr是如何申明的?