如果你不是unicode环境, char* 不是用CString填进去的,应该是这样 CString szParA; CString szParB; 假设接口是: fun(char* ParA, char* parB); 那么应该写作: fun(szParA.GetBuffer(0), szParB.GetBuffer(0); 如果是unciode的编译环境 CString szParA; CString szParB; 假设接口是: fun(char* ParA, char* parB); 那么需要先转换为多字节字符串,然后才可以作为参数填写进去: 如果是wchar_t转换为char接口的可以用这个函数: BOOL MyWideChar_tToMultiByte(LPTSTR lpcwszStr, LPSTR lpOut,INT nOutSize) { DWORD dwMinSize = 0; dwMinSize = WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,NULL,0,NULL,FALSE); if(dwMinSize > nOutSize) { return FALSE; } else { WideCharToMultiByte(CP_OEMCP,NULL,lpInt,-1,lpOut,nOutSize,NULL,FALSE); return TRUE; } } 所以两个参数需要这么转化: char bufA[512];//多申请点,免得溢出 char bufB[512]; MyWideChar_tToMultiByte(szParA.GetBuffer(0), bufA, sizeof(bufA)); MyWideChar_tToMultiByte(szParB.GetBuffer(0), bufB, sizeof(bufB)); 经过转换后,就可以作为char*类的替代品bufA、bufB作为参数填写进去了,如下: fun(bufA, bufB);