win32中winmain参数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;
}
果不其然,问题得到解决。
其实,这次调试花得时间有点长,主要是以为对字符串的理解不够深,另外一个观察问题的能力。希望以后会有所改进。