在VC中不支持C的指针类型语法?怎么办?解决好了给100分

longji 2004-03-30 03:37:56
在VC6编译时出现下面的错误
error C2664: 'Base64' : cannot convert parameter 1 from 'const char *' to 'unsigned char []'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

是这样的:
有这样的函数
void Base64(unsigned char chasc[3],unsigned char chuue[4])
做这样的应用:
Base64(psmtpinfo->UserName + i * 3, buf + i * 4);
psmtpinfo类型:
typedef struct _SMTPINFO
{
char SmtpSrvName[32];
char Port[7];
char UserName[16];
char Password[16];
char From[32];
char To[32];
char Subject[32];
char *msg;

}SMTPINFO;
...全文
76 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
longji 2004-03-30
  • 打赏
  • 举报
回复
我给分怎么没给出去啊,郁闷,重来!
zhucde 2004-03-30
  • 打赏
  • 举报
回复
收到.
longji 2004-03-30
  • 打赏
  • 举报
回复
TO:zhucde
这样吧,我再开的帖子给你分,这一百分给此帖的其它人,谢谢你!
http://expert.csdn.net/Expert/topic/2904/2904821.xml?temp=.7100794
longji 2004-03-30
  • 打赏
  • 举报
回复
e:\nt_gqp_dll\nt_gqp_dll.cpp(41) : warning C4518: '__declspec(dllexport ) ' : storage-class or type specifier(s) unexpected here; ignored
e:\nt_gqp_dll\nt_gqp_dll.cpp(41) : warning C4230: anachronism used : modifiers/qualifiers interspersed, qualifier ignored
这是错误,出现在下面这一行:
BOOL WINAPI _declspec(dllexport) DllMain(HINSTANCE hDLLInst,
DWORD fdwReason,LPVOID pvReserved)
longji 2004-03-30
  • 打赏
  • 举报
回复
谢谢zhucde,不是变量的错误,可能是DLL的什么问题,这个是我用的别人的代码,DLL我也不是很清楚,我只是想先把这个用起来,然后再慢慢来学习DLL和一些API。
zhucde 2004-03-30
  • 打赏
  • 举报
回复
const int buflen = 128;比#define buflen 128 好!
zhucde 2004-03-30
  • 打赏
  • 举报
回复
警告可以解决,
比如一个变量定义了,却没有使用,把这个变量删了就行.
还有类型转换,加个强行转换就不会有警告了.
bluebohe 2004-03-30
  • 打赏
  • 举报
回复
#define buflen 128
zhucde 2004-03-30
  • 打赏
  • 举报
回复
你有没有在其它地方使用过或又定义了buflen?
longji 2004-03-30
  • 打赏
  • 举报
回复
感谢各位的帮忙,虽然还有两个警告,但已经编译通过了,感谢!给分!
zhucde 2004-03-30
  • 打赏
  • 举报
回复
什么错误?

把错误信息写全一点.
看你的程序没有错误啊/
longji 2004-03-30
  • 打赏
  • 举报
回复
TO:zhucde 行是行了,不过这样那个psmtpinfo->UserName里的信息好象并没有被处理成功啊
这样的话,我的 const int buflen = 128;
char buf[buflen];
处又出错了,如下:
see declaration of 'buflen'


更多代码:
const int buflen = 128;
char buf[buflen];
int i,userlen,passlen;

ZeroMemory(buf, buflen);

userlen = lstrlen(psmtpinfo->UserName);
passlen = lstrlen(psmtpinfo->Password);

for(i = 0; i < (userlen%3?userlen/3+1:userlen/3); i++)
{
Base64((unsigned char*)(psmtpinfo->UserName+i * 3), (unsigned char*)(buf + i * 4));
}

if (Talk(sockid, "334", buf))
{
goto STOP;
}
ymbymb 2004-03-30
  • 打赏
  • 举报
回复
如下改
void Base64(char *chasc, char *chuue)

调用时:
Base64((char*)(psmtpinfo->UserName+i * 3), (char*)(buf + i * 4));
longji 2004-03-30
  • 打赏
  • 举报
回复
TO:zhucde 按你说的做了,可提示如下错误:
error C2664: 'Base64' : cannot convert parameter 1 from 'unsigned char *' to 'char *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
rivershan 2004-03-30
  • 打赏
  • 举报
回复
函数参数类型错误
基础知识问题。。。。
longji 2004-03-30
  • 打赏
  • 举报
回复
TO:happyparrot 问题是我的BASE64函数很次要处理3个字符

void Base64(unsigned char chasc[3],unsigned char chuue[4])
{
int i,k=2;
unsigned char t = 0;

for(i=0;i<3;i++)
{

*(chuue+i)=*(chasc+i)>>k;
*(chuue+i)|=t;
t=*(chasc+i)<<(8-k);
t>>=2;
k+=2;
}

*(chuue+3)=*(chasc+2)&63;

for(i=0;i<4;i++)

if((*(chuue+i)>=0)&&(*(chuue+i)<=25)) *(chuue+i)+=65;

else if((*(chuue+i)>=26)&&(*(chuue+i)<=51)) *(chuue+i)+=71;

else if((*(chuue+i)>=52)&&(*(chuue+i)<=61)) *(chuue+i)-=4;

else if(*(chuue+i)==62) *(chuue+i)=43;

else if(*(chuue+i)==63) *(chuue+i)=47;

}
zhucde 2004-03-30
  • 打赏
  • 举报
回复
将函数定义成这样:

void Base64(unsigned char *chasc,unsigned char *chuue)

调用时:
Base64((unsigned char*)(psmtpinfo->UserName+i * 3), (unsigned char*)(buf + i * 4));
longji 2004-03-30
  • 打赏
  • 举报
回复
error C2664: 'Base64' : cannot convert parameter 1 from 'const char *' to 'char *'
Conversion loses qualifiers
To:xuanzg(小钢娃):用了你的方法后,提示上面多错误。
快乐鹦鹉 2004-03-30
  • 打赏
  • 举报
回复
要么修改结构的参数为unsigned char类型,要么修改函数的参数为char类型
xuanzg 2004-03-30
  • 打赏
  • 举报
回复
void Base64(unsigned char chasc[3],unsigned char chuue[4])
这样声明的参数是const char *的类型,
void Base64(char *chasc,char *chuue)
就可以了


加载更多回复(1)

16,467

社区成员

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

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

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