首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

dll 中char* 传参的有关问题

2012-03-20 
dll 中char* 传参的问题externC __declspec(dllexport)void__stdcallEncoder_Base64(char*strInput,char

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);

热点排行