大家好 我想建立从vc6上传递数组给dll文件,返回数组元素个数
dll文件:
_declspec(dllexport) int zifu(char a[])
{
return sizeof(a)/sizeof(char); 
}在vc6中:
void CDlltestDlg::OnShow() 
{
// TODO: Add your control notification handler code here
UpdateData();

char buf[20]={0};
itoa(m_edit,buf,2);     m_edit2=zifu(buf);
UpdateData(FALSE);}
但是zifu(buf)返回值是4,请问这是为什么啊?难道参数不能这样传吗?

解决方案 »

  1.   

    在zifu函数中,a是一个指针,输出的是指针的长度,四个字节
      

  2.   

    建议你看看指针和数组的区别
    http://tech.163.com/05/0823/11/1RR94CAS00091589.html
      

  3.   

    3、数据名可能失去其数据结构内涵   到这里似乎数组名魔幻问题已经宣告圆满解决,但是平静的湖面上却再次掀起波浪。请看下面一段程序:
    1. #include <iostream.h>
    2. void arrayTest(char str[])
    3. {
    4.  cout << sizeof(str) << endl;
    5. }
    6. int main(int argc, char* argv[])
    7. {
    8.  char str1[10] = "I Love U";
    9.  arrayTest(str1); 
    10.  return 0;
    11. }  程序的输出结果为4。不可能吧?  一个可怕的数字,前面已经提到其为指针的长度!  结论1指出,数据名内涵为数组这种数据结构,在arrayTest函数体内,str是数组名,那为什么sizeof的结果却是指针的长度?这是因为:  (1)数组名作为函数形参时,在函数体内,其失去了本身的内涵,仅仅只是一个指针;  (2)很遗憾,在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。  所以,数据名作为函数形参时,其全面沦落为一个普通指针!它的贵族身份被剥夺,成了一个地地道道的只拥有4个字节的平民。  以上就是结论4。
      

  4.   

    你是想得到数组的长度,还是数组中字符串的长度?数组的长度,你定义成10,它的长度就是10;如果是数组中字符串的长度,可以是0-9;
    求字符串的长度,可以用
    _declspec(dllexport) int zifu(char a[])
    {
    return strlen(a);
    }
      

  5.   

    尽量少用sizeof,这只是一个操作符,在编译器就给赋值了
    _declspec(dllexport) int zifu(char a[])
    {
    return sizeof(a)/sizeof(char);  
    }
    这个直接被编译器编译成
    _declspec(dllexport) int zifu(char a[])
    {
    return 4;  
    }
      

  6.   

    在dll中strlen 显示这是未定义的,  我想得到数组中元素的个数
      

  7.   

    包含头文件
    #include <iostream>
    #include <string>
    using namespace std;
      

  8.   

    好像不行,两错误
    LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
    Debug/dll1.exe : fatal error LNK1120: 1 unresolved externals
    Error executing link.exe.
      

  9.   

    #include <iostream>
    #include <string>
    using namespace std;
    加到你动态链接库中去
      

  10.   

    strlen获得的是0之前的字节数
    你应该在exe中直接使用sizeof(buf)/sizeof(char)
      

  11.   

    exe?.strlen我试了下  在dll中连接通不过
      

  12.   


    但是在c++程序中 sizeof(a)/sizeof(char)是计算数据元素的个数,
      

  13.   

    大家好 我想建立从vc6上传递数组给dll文件,返回数组元素个数你要的不就是元素的个数?
      

  14.   

    return sizeof(a)/sizeof(char);  这句错了,因为dll接到a,实际是不是a[20]的第一个元素指针:a[0],指针一般都4位
    所以:4 == sizeof(a)/sizeof(char);
    明白?
      

  15.   


    这句错了,因为dll接到a,实际就是a[20]的第一个元素指针:a[0],指针一般都4位
    所以:
      

  16.   

    可以这样[不一定最好,仅参考]:
    _declspec(dllexport) int zifu(char a[])
    {
        for(int i=0;i<20;i++)
       {
          if(a[i] == 0) break;
       }
       return i;  
    }
        
      

  17.   

    函数形参退化成了指针.. sizeof指针 =4 ..