win32中winmain参数lpCmdLine是地址名是无法正常运行

win32winmain参数lpCmdLine是地址名是无法正常运行

 

首先描述准备显示的功能:使用win32 app创建一个程序,可以实现文件关联方面的操作,即选择一副图片,可以使用右键选择此次得到的exe(类似于文件文件关联)

 

 

 

 

但是程序没有正常运行,于是使用messagebox调出lpcmdline,弹出如下对话框:


于是,认为lpcmdline中存在单斜杠(/),但是被被函数调用 ,这个单斜杠成为了转义字符。

实际上,这种想法是错误的,因为lpcmdline的类型Lpstr就是char *,因此如果char数组那个存在单斜杠,那么字符中一定是’//’

其实真正的问题,在于那个引号!!!笔者在winmain里面,手动对lpcmdline赋值,发现messagebox输出的char中,是没有双引号存在的,因此lpcmdline的地址不可用,问题应该与这个双引号相关。

于是,笔者增加了如下代码:

if(strcmp(lpCmdLine,""))

      {

           char * name = new char [strlen(lpCmdLine)-2];

           int i=0;

           i=1;

           if(lpCmdLine[0] == 34)//34 双引号ascii

           {

                 while(lpCmdLine[i] !=34)

                 {

                      name[i-1] = lpCmdLine[i];

                      ++i;

                 }

                 name[i-1]= '/0';

           }

 

           pImage = cvLoadImage(name);//这个opencv的一个函数,调用参数是const char *

           if(pImage )

           {

                 MessageBox(NULL,"哇哈","text",MB_OK);

                 MessageBox(NULL,(LPCTSTR)(lpCmdLine),"text",MB_OK);

           }

           delete []name;

    }

果不其然,问题得到解决。

其实,这次调试花得时间有点长,主要是以为对字符串的理解不够深,另外一个观察问题的能力。希望以后会有所改进。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值