问题描述
C#代码:[DllImport("Request.dll",CharSet=CharSet.Ansi,EntryPoint="dd")]publicstaticexternIntPtrdd(inta);publicstaticstringkey(inta){try{stringstr=Marshal.PtrToStringAnsi(dd(1));returnstr;}catch{return"";}}c++代码:TESTCPPDLL_APIchar*__stdcalldd(ints,LPSTRecode,LPSTRimei,LPSTRimsi,LPSTRdata,LPSTR_uinxtime_t){charstr3[50];char*test="252523524";char*test2="24234243";strcpy(str3,test);strcat(str3,test2);char*str=(LPSTR)str3;//sprintf(str3,"%s%s",APPID,APPSecre);returnstr;}问题:C#里面返回的字符串不对,是乱码.但如果直接return"dddddddd"这样就又正常.请问相连的字符串应该怎么操作.
解决方案
解决方案二:
charstr3[50];声明在函数内,生存在调用栈上,一旦调用结束,调用栈将被重置。因此返回str3的指针一定是错误的。一种改正方法是由调用方来提供char[50],类似staticexternintdd(inta,byte[]str3,intstr3Length);
解决方案三:
局部变量,内存被释放了,改为动态申请内存,或由c#提供内存
时间: 2024-11-03 21:05:18