dll 中char* 传参的问题
extern "C " __declspec(dllexport) void __stdcall Encoder_Base64(char* strInput, char** strOutput);
extern "C " __declspec(dllexport) void __stdcall Decoder_Base64(char* strInput, char** strOutput);
void __stdcall Encoder_Base64(char* strInput, char** strOutput)
{
*strOutput = strInput;
}
void __stdcall Decoder_Base64(char* strInput, char** strOutput)
{
*strOutput = strInput;
}
参数从edit控件中来的,传到dll之后,进行调试。
如果输入的字符串是偶数位,则一切正常;
如果输入的字符串是奇数位,则在函数入口时strInput还是正常的,进行赋值之后,strInput和*strOutput就都变成比原来的字符串少一位,何解?
另外,原本函数中间是要用TIdBase64Encoder和TIdBase64Decoder类进行加密解密的,但解密的过程中,发现如果输入的字符串是奇数位,则会报错“coding table entry not found”,如果输入的字符串是偶数位,但不是4的倍数,则程序能够正常运行,但加密再解密后得到的字符串与原字符串不符,也不知道是啥原因。。。
[解决办法]
//传数组地址:
char s[1024];
strcpy(s, Edit1-> Text.c_str());
Encoder_Base64(s, strOutput);
[解决办法]
好像是AnsiString的问题,用std::string也可以
char *p;
std::string s=Edit1-> Text.c_str();
Encoder_Base64(&s[0],&p);
Label1-> Caption=p;
[解决办法]
好像是AnsiString的问题,用std::string也可以
char s[1024];
strcpy(s, Edit1-> Text.c_str());
Encoder_Base64(s, strOutput);
[解决办法]
http://community.csdn.net/Expert/topic/5482/5482930.xml?temp=.1358454
我也问过类似问题,可能有帮助
[解决办法]
cczlp(不惑) 正解:
char s[1024];
strcpy(s, Edit1-> Text.c_str());
Encoder_Base64(s, strOutput);