我定义了一个导出函数:
extern "C" __declspec( dllexport ) int __stdcall GetTuxedoServerStatus()发现用DLL查看器查看的时候,导出的函数名是:_GetTuxedoServerStatus@0
这是为什么? 一般的导出函数名称不是就是函数名本身吗? 是不是我定义的有问题?另外,如果我想往这个函数里穿字符串,那么是否可以这样定义?
extern "C" __declspec( dllexport ) int __stdcall GetTuxedoServerStatus(char * pass, char * ReturnMsg);第一个参数用做传入,第二个参数用作返回字符串,这样使用是否正确?
PS:这时候得到的导出函数名是_GetTuxedoServerStatus@8这个函数我主要是用C++实现了调用tuxedo的功能,结果发现有严重的内存泄漏,代码如下,每次调用之后,都会内存泄漏.....可有人知道是什么原因?
似乎是最后的tpfree根本没有起到释放内存的效果....
extern "C" __declspec( dllexport ) int __stdcall GetTuxedoServerStatus()
{
FBFR32 *sendbuf, *rcvbuf;
long rcvlen;
int ret,goon,index,srvId,numReq;
long ta_flags;
TPINIT *tpinitinfo;
// char * returnmsg = new char[2048];// returnmsg[0] = 0;
// ReturnStr[0] = 0;
tpinitinfo = (TPINIT *)tpalloc("TPINIT", NULL, 512);
//tpinitinfo初始化
strcpy(tpinitinfo->usrname,"");
strcpy(tpinitinfo->cltname,"");
strcpy(tpinitinfo->passwd,"tuxedo");
tpinitinfo->flags = TPMULTICONTEXTS; if (tpinit(tpinitinfo) == -1)
{
// tpfree(tpalloc);
tpfree((char *)tpinitinfo);
return -1;
}
if((sendbuf =(FBFR32 *)tpalloc("FML32", NULL, MAX_LEN)) == NULL)
{
tpterm();
tpfree((char *)tpinitinfo);
return -2;
} if((rcvbuf =(FBFR32 *)tpalloc("FML32", NULL, 4096)) == NULL)
{
tpfree((char *)sendbuf);
tpterm();
tpfree((char *)tpinitinfo);
return -2;
}
tpfree((char *)sendbuf);
tpfree((char *)rcvbuf);
tpfree((char *)tpinitinfo);
tpterm();
//delete(returnmsg);
return 0;
}
extern "C" __declspec( dllexport ) int __stdcall GetTuxedoServerStatus()发现用DLL查看器查看的时候,导出的函数名是:_GetTuxedoServerStatus@0
这是为什么? 一般的导出函数名称不是就是函数名本身吗? 是不是我定义的有问题?另外,如果我想往这个函数里穿字符串,那么是否可以这样定义?
extern "C" __declspec( dllexport ) int __stdcall GetTuxedoServerStatus(char * pass, char * ReturnMsg);第一个参数用做传入,第二个参数用作返回字符串,这样使用是否正确?
PS:这时候得到的导出函数名是_GetTuxedoServerStatus@8这个函数我主要是用C++实现了调用tuxedo的功能,结果发现有严重的内存泄漏,代码如下,每次调用之后,都会内存泄漏.....可有人知道是什么原因?
似乎是最后的tpfree根本没有起到释放内存的效果....
extern "C" __declspec( dllexport ) int __stdcall GetTuxedoServerStatus()
{
FBFR32 *sendbuf, *rcvbuf;
long rcvlen;
int ret,goon,index,srvId,numReq;
long ta_flags;
TPINIT *tpinitinfo;
// char * returnmsg = new char[2048];// returnmsg[0] = 0;
// ReturnStr[0] = 0;
tpinitinfo = (TPINIT *)tpalloc("TPINIT", NULL, 512);
//tpinitinfo初始化
strcpy(tpinitinfo->usrname,"");
strcpy(tpinitinfo->cltname,"");
strcpy(tpinitinfo->passwd,"tuxedo");
tpinitinfo->flags = TPMULTICONTEXTS; if (tpinit(tpinitinfo) == -1)
{
// tpfree(tpalloc);
tpfree((char *)tpinitinfo);
return -1;
}
if((sendbuf =(FBFR32 *)tpalloc("FML32", NULL, MAX_LEN)) == NULL)
{
tpterm();
tpfree((char *)tpinitinfo);
return -2;
} if((rcvbuf =(FBFR32 *)tpalloc("FML32", NULL, 4096)) == NULL)
{
tpfree((char *)sendbuf);
tpterm();
tpfree((char *)tpinitinfo);
return -2;
}
tpfree((char *)sendbuf);
tpfree((char *)rcvbuf);
tpfree((char *)tpinitinfo);
tpterm();
//delete(returnmsg);
return 0;
}
解决方案 »
- 怎么定义,可变长字符数组
- 大家来找茬,找找小错误
- 想了解一下,象qq,360安全卫士这类规模的软件,开发团队一般多少人呀?
- 跪求各位大侠帮忙!!!!!!小弟毕设急用
- 均衡器中各种类型(pop,jazz)中对各个频率的设置值有标准么(再发)
- 谁看过“用TCP/IP进行网际互联”,请问这本书的清华大学和电子工业两个版本哪个好?
- 问题一个很菜的问题
- 将象素点数据集转换成一个位图文件的函数,请大家提出修改意见!
- 读取文本文件的问题?
- @@@@@@@@怎么没有人回答我的问题阿 !迷茫阿 !!高手们啦小第一把阿 !!!!!!!!!
- dll中导出对话框资源并显示而出现的奇怪问题
- CFileDialog的派生类总是显示“另存为”,怎么才能让它成为“保存”呢?
定义了如下变量:FBFR32 *sendbuf, *rcvbuf;
long rcvlen;
int ret,goon,index,srvId,numReq;
long ta_flags;
TPINIT *tpinitinfo;
释放过程: tpfree((char *)sendbuf);
tpfree((char *)rcvbuf);
tpfree((char *)tpinitinfo);
tpterm();
我觉得已经算是释放完全的啊,难道是tpfree调用的有问题?
EXPORTS
GetTuxedoServerStatus传递字符串通过char*参数。内存泄露的问题应该是出现在tp函数里面,可以跟踪看看。
如果你在调用的时候也用同样的约定调用,这个导出的函数名没有影响
VC++中默认的就是C调用约定当然如果你用标准调用约定,肯定要关注函数名的
整个dll里代码就这么点呢。