vc++ dll调用delphi dll返回始终为空的 问题(高分)

hm22cn 2008-11-05 10:56:12
delphi 的dll如下:
procedure enc_pin(khzh: pchar;srcpswd: pchar;dstpswd: pchar);stdcall;external 'eaicrypt.dll';
其中的 khzh和srcpswd为输入参数,dstpswd为输出参数
我自己写的vc++ 调用上面dll 的程序如下:
DESPWD_API char* __stdcall fnDESPWD(char *src)
{
char * cdno=NULL;
char * pwd=NULL;
char * deststr=NULL;
char *f = NULL;

char strcdno[100];
char strpwd[100];
char strdest[100];

memset(strcdno, 0, sizeof(strcdno));
memset(strpwd, 0, sizeof(strpwd));
memset(strdest, 0, sizeof(strdest));

ofstream fout;
fout.open("output.txt");

//字符串形式:cdno|pwd 2222222|33333

f=strstr(src , "|");
fout << flush;
if (f!=NULL)
strncpy(strcdno,src,strlen(src)-strlen(f));
f++;
strncpy(strpwd,f,strlen(f));


fout << "cdno is : " << strcdno << "\n";
fout << flush;
fout << "pwd is : " << strpwd << "\n";
fout << flush;



HINSTANCE hinstDLL=NULL;
hinstDLL=LoadLibrary("eaicrypt.dll");
if(hinstDLL!=NULL)
{

enc_pin connect;
connect = (enc_pin)::GetProcAddress (hinstDLL,"enc_pin");
if (!connect)
{
FreeLibrary(hinstDLL);
return NULL;
}
connect((LPSTR)(LPCTSTR)strcdno,(LPSTR)(LPCTSTR)strpwd,(LPSTR)(LPCTSTR)strdest);
FreeLibrary(hinstDLL);

}
fout << "despwd is : " << strdest << "\n"; //这里可以得到正确的值
fout << "despwd is[0] : " << &strdest[0]<< "\n";//这里也可以得到正确的值
fout << flush;
fout.close();
return &strdest[0];
}
可是外面调用这个dll得到的是空值, 在fout打印出来的log 中 都可以得到正确的值,可 return &strdest[0] 为空,不知道是那里错了,
各位大大帮忙看一下.
...全文
80 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangkunjie 2008-11-05
  • 打赏
  • 举报
回复
定义的时候new一下试试
当然也得注意delete
cnzdgs 2008-11-05
  • 打赏
  • 举报
回复
strdest是局部数组,返回后就释放了,如果要返回指针,你需要用new来分配,由调用者来释放。
hm22cn 2008-11-05
  • 打赏
  • 举报
回复
忘了写定义了,我是这样定义的:
typedef void (*enc_pin)(char* cdno,char *pwd, char *deststr);

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧