小弟初学dll,有一事不明,请大家指教。

TTJAVA 2003-07-30 08:37:03
我想作一导出函数。这个导出函数有这样一个要求:要输出字符串数组,数组大小是动态的。如何做啊?比如:extern "C" __declspec(dllexport) int WINAPI GetPara(BSTR *PartPara,BSTR PartPath)
{
CStringArray pp;
......
int count =pp.GetSize();
for(int i=0;i<count;i++)
PartPara[i]=pp..GetAt(i).AllocSysString();
return count;
}
这样做可以吗?有问题吗?没有释放资源阿。这需要在客户端释放吗?如果用别的语言调用,又如何释放bstr 的变量呢?在客户端如何写程序调用呢?我编的老是出内存的错误。请教各位了?帮帮小弟。

...全文
29 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
TTJAVA 2003-08-01
  • 打赏
  • 举报
回复
解决。ok!xiexie王进!!!!!!!!!!!
在vc中问题了。不过在pb中使用的时候,字符串有问题。在那里如何释放啊?而且传的字符串是乱码.不过你可以的满分了。如果这个问题你不熟的话,我另开贴子;^_^
孤必有邻 2003-08-01
  • 打赏
  • 举报
回复
对不起,我的代码确实有问题,试试下面的吧(我已经试过了)

int Function0(char**array)
{
*array=new char[8];
strcpy(*array,"Hello");
return 0;
}
int Function1(char***array)
{
char str[][32]={
"abcd",
"1234567890",
"ABCDEFG",
"I LOVE YOU!",
"What's your name?",
"My GOD",
"Fuck",
"!",
};
int count=8;
*array=new char*[count];
for(int i=0;i<count;i++)
{
(*array)[i]=new char[strlen(str[i])+1];
strcpy((*array)[i],str[i]);
}
return count;
}

void CXXXXDlg::OnButtonTest()
{
char * a;
Function0(&a);
AfxMessageBox(a);
delete []a;

char ** array;
int count=Function1(&array);
for(int i=0;i<count;i++)
{
AfxMessageBox((array)[i]);
delete [](array[i]);
}
delete []array;
}
TTJAVA 2003-07-31
  • 打赏
  • 举报
回复
郁闷的我,继续顶!
TTJAVA 2003-07-31
  • 打赏
  • 举报
回复
释放又问题
TTJAVA 2003-07-31
  • 打赏
  • 举报
回复
bu xing
slimsymphony 2003-07-31
  • 打赏
  • 举报
回复
那么改成
for(int i=0;i<count;i++)
{
delete array[i];
}
delete []array;
试试
TTJAVA 2003-07-31
  • 打赏
  • 举报
回复
to 王进
for(int i=0;i<count;i++)
{
delete []array[i];
}
delete []array;
这里有问题。
TTJAVA 2003-07-31
  • 打赏
  • 举报
回复
不行!郁闷!
shenghuafen 2003-07-31
  • 打赏
  • 举报
回复
学习中......
孤必有邻 2003-07-31
  • 打赏
  • 举报
回复
换一种方式不行吗:
extern "C" __declspec(dllexport) int WINAPI GetPara(char**array)
{
CStringArray pp;
......
int count =pp.GetSize();
array=new char*[count];
for(int i=0;i<count;i++)
{
array[i]=new char[pp.GetAt[i].GetLength()+1];
strcpy(array[i],pp.GetAt[i].GetBuffer(0));
}
return count;
}
调用:
char ** array;
int count=GetPara(array);
....
//释放
for(int i=0;i<count;i++)
{
delete []array[i];
}
delete []array;
TTJAVA 2003-07-31
  • 打赏
  • 举报
回复
是不是分太少了。只要能解决,我在加。高手!!!
看过来!!!
shylsz 2003-07-31
  • 打赏
  • 举报
回复
我也来帮你顶
TTJAVA 2003-07-30
  • 打赏
  • 举报
回复
有没有高手啊?看来我的运气不好。:(
TTJAVA 2003-07-30
  • 打赏
  • 举报
回复
up.jiu jiu wo le!
TTJAVA 2003-07-30
  • 打赏
  • 举报
回复
ding, 只好自己了

15,471

社区成员

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

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