大家好 我想建立从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,请问这是为什么啊?难道参数不能这样传吗?
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,请问这是为什么啊?难道参数不能这样传吗?
解决方案 »
- 当在VC++里执行"delete from tablename"SQL语句后,重新插入新数据,再读取时,却提示记录已被删除??
- 对话框程序一点就死
- 怎样知道控件的是否可见?
- 新手请教 请大虾们推荐本vc入门书
- 熟悉网络编程或有方面经验的请给我一些意见,关于WinSock的编程策略。谢谢!
- 如何将成员数据(数据的内容是文字)写到视图中
- 如何得到指定文件的大小?
- VC++中能把一个对话框作为另一个对话框的一个控件使用吗?
- 脑筋急转!每个10分
- MFC读写文件的问题?
- MFC导出函数加上__stdcall后,客户程序调用为什么会引起崩溃
- 一个困恼很久的问题,工作者线程AfxBeginThread必需传递hWnd么 更新界面用::PostMessage
http://tech.163.com/05/0823/11/1RR94CAS00091589.html
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。
求字符串的长度,可以用
_declspec(dllexport) int zifu(char a[])
{
return strlen(a);
}
_declspec(dllexport) int zifu(char a[])
{
return sizeof(a)/sizeof(char);
}
这个直接被编译器编译成
_declspec(dllexport) int zifu(char a[])
{
return 4;
}
#include <iostream>
#include <string>
using namespace std;
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/dll1.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
#include <string>
using namespace std;
加到你动态链接库中去
你应该在exe中直接使用sizeof(buf)/sizeof(char)
但是在c++程序中 sizeof(a)/sizeof(char)是计算数据元素的个数,
所以:4 == sizeof(a)/sizeof(char);
明白?
这句错了,因为dll接到a,实际就是a[20]的第一个元素指针:a[0],指针一般都4位
所以:
_declspec(dllexport) int zifu(char a[])
{
for(int i=0;i<20;i++)
{
if(a[i] == 0) break;
}
return i;
}