vc中的值传参问题,太难搞了!大家帮帮忙!

lyingangel 2009-08-06 03:17:24
这是一个dll文件里的函数。

static char * m_CardInfo; (这是个全局的)
原来是

char * _stdcall ReadCardInfo(int id)
{
//
rxd_temp.SetSize(0);
CString sAddrh,sAddrl;
sAddrh.Format("%x",id/256);
sAddrl.Format("%x",id%256);
//
if(Send(sAddrh,sAddrl,"35")==false) return NULL;
////////////////////////////////
return m_CardInfo;
}

demo调用该dll文件时:

char* cardInfo;

ReadCardInfo(string2int(sId));



现在要改成,传入一个参数,把需要的值写入这个参数。
也就是
bool _stdcall ReadCardInfo(int id,char* mycardinfo){


}

就是将参数传入后,在函数里修改参数对应的值,这样来得到自己想要的内容。
也就是得到m_CardInfo


我说明白了吗?

怎么改啊!都尝试过很多方法了。。。。。。

帮帮忙,在线等待!



...全文
250 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyingangel 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zzz3265 的回复:]
如果信息数据是字符串可以用 strcpy(mycardinfo, m_CardInfo);
不是就用 memcpy
[/Quote]

要用strcpy 这个函数,是不是要包含 string.h 头文件啊!
我包含了,可总是在strcpy中编译不过。我是个菜鸟。。
lyingangel 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 gordon3000 的回复:]
检查m_CardInfo指针,是不是无效?

[/Quote]

m_CardInfo ,它是dll文件里的静态指针。

有个函数对它进行赋值的:

bool _stdcall SetConfigure(char * comPort, int baudrate, int dataBit,double stopBit,char * verifyType)
{
if(port.InitPort(comPort,baudrate,verifyType[0],dataBit,stopBit)==false)
{
return false;
}
port.StartMonitoring();
m_CardInfo=new char[600];
if(m_CardInfo==NULL)
return false;
return true;
}

肯定有效,因为没改之前,还一直能用!我也没改过它!
lyingangel 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 gordon3000 的回复:]
ReadCardInfo(string2int(sId),(char*)m_CardInfo);
[/Quote]

不行,还是崩溃
Ghost90 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lyingangel 的回复:]
错了。

mycardinfo = m_CardInfo
在dll文件中能编译通过。
可是在其他项目中调用该dll文件时出错了。
就是在调用char* cardInfo;

ReadCardInfo(string2int(sId),cardInfo);

时,程序崩溃了
[/Quote]

ReadCardInfo(string2int(sId),cardInfo);
这么调应该没问题!
是不是你的 m_CardInfo 没分空间

m_CardInfo=new char[128];
ahao 2009-08-06
  • 打赏
  • 举报
回复
你这个参数是传值的,能返回值就出鬼了
要返回值用char*& mycardinfo
bluesky395 2009-08-06
  • 打赏
  • 举报
回复
改为这样看看。。。
bool _stdcall ReadCardInfo(int id, char** mycardinfo)
{
...
*mycarinfo=m_CardInfo;
}

char* cardInfo;
ReadCardInfo(string2int(sId), &carInfo);
雪影 2009-08-06
  • 打赏
  • 举报
回复
Static变量是静态局部变量,虽然在被调用后他的值依然不便但是其他函数不能引用它,而全局变量是所有函数都可以调用的。
另外;static的全局变量只能在该文件中使用,就算其它文件用extern来声明也
不能用,而没用static定义的全局变量在外部文件中可以通过extern来声明引用它

static char * m_CardInfo;是DLL某个cpp文件的局部变量,导致其他的地方不能使用吧。
danxuezx 2009-08-06
  • 打赏
  • 举报
回复
这就是一个普通的参数传递,不会有什么问题的。程序崩溃肯定是您里面的指针无效。仔细检查一下。
雪影 2009-08-06
  • 打赏
  • 举报
回复
static char * m_CardInfo;
把前面的static修饰词删除试一试。
jason176374 2009-08-06
  • 打赏
  • 举报
回复
mycardinfo传入前开辟空间没有?
zhuzhenlei 2009-08-06
  • 打赏
  • 举报
回复
是我看错了还是怎么,好像mycardinfo没空间
Yofoo 2009-08-06
  • 打赏
  • 举报
回复
如果信息数据是字符串可以用 strcpy(mycardinfo, m_CardInfo);
不是就用 memcpy
副组长 2009-08-06
  • 打赏
  • 举报
回复
检查m_CardInfo指针,是不是无效?
副组长 2009-08-06
  • 打赏
  • 举报
回复
ReadCardInfo(string2int(sId),(char*)m_CardInfo);
lyingangel 2009-08-06
  • 打赏
  • 举报
回复
错了。

mycardinfo = m_CardInfo
在dll文件中能编译通过。
可是在其他项目中调用该dll文件时出错了。
就是在调用char* cardInfo;

ReadCardInfo(string2int(sId),cardInfo);

时,程序崩溃了
lyingangel 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 happyparrot 的回复:]
mycardinfo = m_CardInfo不行么
[/Quote]

不行,编译通不过的
快乐鹦鹉 2009-08-06
  • 打赏
  • 举报
回复
mycardinfo = m_CardInfo不行么

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧