新手提问:请教几个问题?

amiao 2004-11-24 03:25:46
1. 在头文件中定义了一个字符串,const char* str = "hello, world";
编译程序OK,但链接程序报错
‘error LNK2005: "char const * const str" (?str@@3PBDB) already defined in apicommDlg.obj’
而为什么 const char str[] = "hello, world"; 却正确

2. ::AfxMessageBox("hello,world"); 中的‘::’是什么意思?不加此符号和加上符号有什么区别?

3. VC中有没有类似Delphi中这样的功能:
xxx.pas文件中启动初始化类
var
hs : OCommon;

initialization
hs.Create;

finalization
hs.Destroy;

4. unsigned 是 32 位的无符号数据类型,那么 unsigned char c; 中的 c 是几位?占用几个字节空间?

5. C++ 中的各种指针占用内存空间是否一样,几个字节? char* p1 和 int* p2,p1 和 p2 在栈上是否都

占用 4 个字节空间?

6. 怎样获得当前执行文件的路径名称?类似Delphi中的ExtractFilePath(Application.ExeName);

7. 宏定义(#define)和常量定义(const)到底有什么区别?他们怎样存储?
定义了 #define HELLO "hello,world" 这样一个宏,怎样使用?

8. VC中有没有类似Delphi中的 Application.ProcessMessages; 同步应用程序函数

9. 在上面的函数内,有如下代码:
CApicommDlg &p=*(CApicommDlg *)pParam;
p.UpdateData(TRUE); // 编译链接正确,运行出错
p.m_strReceive = "hello,world"; // 编译链接运行正确
为什么 p.UpdateData(TRUE) 会报错,而调用其他的变量正确?
...全文
142 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
amiao 2004-11-24
  • 打赏
  • 举报
回复
多谢楼上各位的热心帮忙,希望以后我的帖子大家多捧场!
oyljerry 2004-11-24
  • 打赏
  • 举报
回复
AfxMessageBox(HELLO); // ERROR
参数为char*
oyljerry 2004-11-24
  • 打赏
  • 举报
回复
1. 重复定义了,可能头文件重复包含

2. 域作用符,确定作用域

4. 8位,1字节
5. 指针都是4字节

6. GetModulePath

7. 一个宏定义,编译时展开,常量定义,定义时初始化

echoxue 2004-11-24
  • 打赏
  • 举报
回复
up
zhaopeng3 2004-11-24
  • 打赏
  • 举报
回复
取最大值例子
#define MAX(a,b) ((a) > (b)) ? (a) : (b)

int a = 10;
int b = 20;
int c = MAX(a, ++b);

运行结果c=22,MAX(10, 21)应该是21
zhaopeng3 2004-11-24
  • 打赏
  • 举报
回复
1. 重复定义,移到cpp文件中
2. ::代表使用全局的函数,没有的话优先考虑类的函数
3. 没学过Delphi,看不懂
4. unsigned char 1个字节,8位
5. 指针都是4个字节
6. GetCurrentDirectory得到程序运行的起始位置(快捷方式的属性中),大部分是程序所在的位置
7. 宏定义在编译时被展开替换,建议使用常量,经典例子是取最大值,用宏定义保证出错
8. 同3
9. 不知道,一般没有这样用的,但UpdateData是公有函数,应该可以由外部调用.
andrew_ma 2004-11-24
  • 打赏
  • 举报
回复
1.需要为指针new个空间
9.p是个动态创建的对话框,所以需创建一下
p.creat(UINT nIDTemplate)
amiao 2004-11-24
  • 打赏
  • 举报
回复
#define HELLO "hello,world";
CString hello("hello,world");

怎样才能像 hello 一样正常使用 HELLO?
比如:
AfxMessageBox(hello);
AfxMessageBox(HELLO); // ERROR
amiao 2004-11-24
  • 打赏
  • 举报
回复
1。以前我定义的是 const char* ,刚开始编译链接都正确,后来调用之后好像就总是报这个错误,换个常量名字却又是编译链接正确

sock5(|一生何求|) && crushor()
9。你们的方法好像不对
crushor 2004-11-24
  • 打赏
  • 举报
回复
1。我觉得没有问题。
4。unsigned char 占一字节
5。指针都是一样的,都是地址。
6。我记得好像是winapp对象直接有成员变量是什么程序名啊,路径啊之类的。
9。这个好像是说对话框还没有创建,所以错误,把这一句放到后面试下看。
konista 2004-11-24
  • 打赏
  • 举报
回复
konista(M),对不住。
////////////////
没关系,我经常写错的,这次偶尔写对,嘿嘿
sock5 2004-11-24
  • 打赏
  • 举报
回复
8。你说的意思是像VB中的DoEvents事件吧,非同步消息队列,VC中不存在这个,只有自己做线程同步了!

9。你用的是多线程LPVOID吧
UpdateData是私有内部成员,也就是说你不可以在该类以外的地方调用它,在对话框中做一函数,函数里边调用UpdateData()
hjunxu 2004-11-24
  • 打赏
  • 举报
回复
呵呵,好象我看错了,
konista(M),对不住。
hjunxu 2004-11-24
  • 打赏
  • 举报
回复
改正 konista(M) 的一个答案,
4.unsigned 是 32 位的无符号数据类型,那么 unsigned char c; 中的 c 是几位?占用几个字节空间?
unsigned char 是一个BYTE。
sock5 2004-11-24
  • 打赏
  • 举报
回复
6.GetCurrentDirectory() 返回的是程序文件所在的路径
sock5 2004-11-24
  • 打赏
  • 举报
回复
2.字符串前面的::是代表调用全局函数或变量,你个函数的意义是代表使用API中的MessageBox,而不是使用MFC封装后的MessageBox
sock5 2004-11-24
  • 打赏
  • 举报
回复
1.没为指针分配地址,如下写法
char* str = new char[20];
str = "hello,world",
konista 2004-11-24
  • 打赏
  • 举报
回复
1.const char * APPPATHNAME = _T("C:\\Program Files\\ICIT\\bin\\cachet\\Reader.exe");我用着没问题啊
2.域,::AfxMessageBox指全局函数,比方说
int a;
main()
{
int a;
::a;//外面那个
a;//里面的a
}
3.有
4.8bits,一个字节
5.都占4个字节
6.GetModuleFileName
7.使用起来差不多,但宏定义会预编译,你的程序中将只有"hello,world",而常量则存在HELLO
8.该不会是WinProc吧。
9.这个不太清楚。
amiao 2004-11-24
  • 打赏
  • 举报
回复
分这么好拿,怎么没人顶!?

16,548

社区成员

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

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

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