问题描述
函数原型:LPWSTR*CommandLineToArgvW(LPCWSTRlpCmdLine,int*pNumArgs);用于将一个表示命令行的字符串分解为各个参数[DllImport("shell32")]staticexternstring[]CommandLineToArgvW(stringa,outintb);我的调用方法:inta;string[]ss=CommandLineToArgvW("notepada.txt",outa);foreach(stringsinss)Console.WriteLine(s);运行后总是发生异常:无法封送处理“returnvalue”:无效的托管/非托管类型组合。请问到底该怎么调用啊?希望大家亲自测试一下谢谢了
解决方案
解决方案二:
楼主有没有把工程属性设置成非托管?
解决方案三:
跟这个有关系吗?我调用API从没有设置过这个属性。如果你测试成功了,请告知如何设置。
解决方案四:
跟这个有关系吗?我调用API从没有设置过这个属性。如果你测试成功了,请告知如何设置。
解决方案五:
应该没有关系吧
解决方案六:
尝试返回值设置为StringBuilder
解决方案七:
LPWSTR*CommandLineToArgvW(LPCWSTRlpCmdLine,int*pNumArgs);
=>[DllImport("shell32.dll",CharSet=CharSet.Unicode)]staticexternstringCommandLineToArgv(stringcmdLine,outintnumArgs);
解决方案八:
6楼,玩呢?这个函数的作用是:把一个表示命令行的字符串分解成【多个】参数字符串,你返回一个字符串起什么作用?起码是个字符串的数组嘛
解决方案九:
classProgram{staticvoidMain(string[]args){stringarg="test.exe/a/?";Console.WriteLine("InputCommandLineis:"+arg);Console.WriteLine("ParsedCommandLineis(eachparamper-line):");intnum;foreach(stringvarinCommandLineToArgvWrapper(arg,outnum)){Console.WriteLine(var);}Console.ReadLine();}publicstaticstring[]CommandLineToArgvWrapper(stringcmdLine,outintnumArgs){IntPtrpszArray=CommandLineToArgv(cmdLine,outnumArgs);if(numArgs>0&&pszArray!=IntPtr.Zero){string[]res=newstring[numArgs];for(inti=0;i<numArgs;i++){res[i]=Marshal.PtrToStringUni(Marshal.ReadIntPtr(pszArray,i*IntPtr.Size));}returnres;}returnnewstring[0];}[DllImport("shell32.dll",CharSet=CharSet.Auto)]staticexternIntPtrCommandLineToArgv(stringcmdLine,outintnumArgs);}
解决方案十:
楼主可以看看这个http://pinvoke.net/default.aspx/shell32/CommandLineToArgvW.html