char* dll调用问题

houdongfeng 2007-06-16 10:57:00
VC dll中
   char *tmp;
tmp = new char[13];
    ...
    return tmp
调用中
   char *rr;
strcpy(rr,icprint(2007,6,15));

执行到strcpy(rr,icprint(2007,6,15));就报错
怎么办
...全文
261 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
houdongfeng 2007-06-18
  • 打赏
  • 举报
回复
还是不可以
houdongfeng 2007-06-16
  • 打赏
  • 举报
回复
typedef char* (*IC_OpenSession)(int ,int ,int);
// typedef int (STDMETHODCALLTYPE* IC_OpenSession)();
HINSTANCE gLib32_DLL;
IC_OpenSession icprint;
gLib32_DLL = LoadLibrary ("LUNARCALENDAR.dll");
// gLib32_DLL = LoadLibrary ("ICCInter.dll");
if (gLib32_DLL == NULL)
{
MessageBox("-1");
return;
}
//exit IC
icprint = (IC_OpenSession) GetProcAddress (gLib32_DLL,"Lunarcalendar");
// icprint = (IC_OpenSession) GetProcAddress (gLib32_DLL,"IC_OpenSession");
if (icprint == NULL)
{
FreeLibrary (gLib32_DLL);
MessageBox("-2");
}
else
MessageBox("0");

char *b = icprint(2007,6,15);
//...
delete[] b;
houdongfeng 2007-06-16
  • 打赏
  • 举报
回复
dll源代码
char* WINAPI Lunarcalendar(int li_year,int li_month,int li_day)
{
char *tmp;
tmp = new char[13];
const char *ChDay[] = {"*","初一","初二","初三","初四","初五",
"初六","初七","初八","初九","初十",
"十一","十二","十三","十四","十五",
"十六","十七","十八","十九","二十",
"廿一","廿二","廿三","廿四","廿五",
"廿六","廿七","廿八","廿九","三十"};
const char *ChMonth[] = {"*","正","二","三","四","五","六","七","八","九","十","十一","腊"};


int Spring_NY,Sun_NY,StaticDayCount;
int index,flag;

//Spring_NY 记录春节离当年元旦的天数。
//Sun_NY 记录阳历日离当年元旦的天数。
if( ((LunarCalendarTable[li_year-1901] & 0x0060) >> 5) == 1)
Spring_NY = (LunarCalendarTable[li_year-1901] & 0x001F) - 1;
else
Spring_NY = (LunarCalendarTable[li_year-1901] & 0x001F) - 1 + 31;
Sun_NY = MonthAdd[li_month-1] + li_day - 1;
if( (!(li_year % 4)) && (li_month > 2))
Sun_NY++;

//StaticDayCount记录大小月的天数 29 或30
//index 记录从哪个月开始来计算。
//flag 是用来对闰月的特殊处理。


//判断阳历日在春节前还是春节后

if (Sun_NY >= Spring_NY)//阳历日在春节后(含春节那天)
{
Sun_NY -= Spring_NY;
li_month = 1;
index = 1;
flag = 0;
if( ( LunarCalendarTable[li_year - 1901] & (0x80000 >> (index-1)) ) ==0)
StaticDayCount = 29;
else
StaticDayCount = 30;
while(Sun_NY >= StaticDayCount)
{
Sun_NY -= StaticDayCount;
index++;
if(li_month == ((LunarCalendarTable[li_year - 1901] & 0xF00000) >> 20) )
{
flag = ~flag;
if(flag == 0)
li_month++;
}
else
li_month++;
if( ( LunarCalendarTable[li_year - 1901] & (0x80000 >> (index-1)) ) ==0)
StaticDayCount=29;
else
StaticDayCount=30;
}
li_day = Sun_NY + 1;
}
else//阳历日在春节前
{
Spring_NY -= Sun_NY;
li_year--;
li_month = 12;
if ( ((LunarCalendarTable[li_year - 1901] & 0xF00000) >> 20) == 0)
index = 12;
else
index = 13;
flag = 0;
if( ( LunarCalendarTable[li_year - 1901] & (0x80000 >> (index-1)) ) ==0)
StaticDayCount = 29;
else
StaticDayCount = 30;
while(Spring_NY > StaticDayCount)
{
Spring_NY -= StaticDayCount;
index--;
if(flag == 0)
li_month--;
if(li_month == ((LunarCalendarTable[li_year - 1901] & 0xF00000) >> 20))
flag = ~flag;
if( ( LunarCalendarTable[li_year - 1901] & (0x80000 >> (index-1)) ) ==0)
StaticDayCount = 29;
else
StaticDayCount = 30;
}
li_day = StaticDayCount - Spring_NY + 1;
}
LunarCalendarDay |= li_day;
LunarCalendarDay |= (li_month << 6);
if(li_month == ((LunarCalendarTable[li_year - 1901] & 0xF00000) >> 20))
{
strcat(tmp,"闰");
strcat(tmp,ChMonth[(LunarCalendarDay & 0x3C0) >> 6]);
}
else
strcat(tmp,ChMonth[(LunarCalendarDay & 0x3C0) >> 6]);

strcat(tmp,"月");
strcat(tmp,ChDay[LunarCalendarDay & 0x3F]);

return tmp;
}
houdongfeng 2007-06-16
  • 打赏
  • 举报
回复
报错

Debug Error
Program: D:\App1\App1.exe
Module:
File: i386\chkesp.c
Line: 42

The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.

luohongming 2007-06-16
  • 打赏
  • 举报
回复
char *rr;
strcpy(rr,icprint(2007,6,15));
rr还未分配内存,加rr=new char[???];memset(rr,0,???);

15,472

社区成员

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

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