//如题,请高手赐解,完成YouFunction,可以另添函数。
// 千恩万谢,答厚送分。
int ObjFunction(char *sErrBuffer,...)
{
/* 如题目无关,内容忽略 */
return 0;
}int YouFunction(char *sErrBuffer,...)
{
/*考试内容: 完成YouFunction
要求:调用ObjFunction,原封不动的传递参数,返回结果*/return;
}
// 千恩万谢,答厚送分。
int ObjFunction(char *sErrBuffer,...)
{
/* 如题目无关,内容忽略 */
return 0;
}int YouFunction(char *sErrBuffer,...)
{
/*考试内容: 完成YouFunction
要求:调用ObjFunction,原封不动的传递参数,返回结果*/return;
}
解决方案 »
- 请问E:\Program Files\Microsoft SDK是什么软件的安装目录?
- VC++ 中的ToolTip显示难题?
- 高分求文本比较算法
- 请大家帮忙,关于select
- 使用VC拷贝文件
- windows media player可以访问内存映射文件吗?
- 关于CRichEditView类问题
- unresolved external symbol "public: static void (__cdecl* CAT_TAPI::Line_msg_fun)(void)"
- 100分 大哥们 帮帮忙,关于传递消息的。
- MFC checkbox控件,选中后,将对勾的颜色改成绿色
- 在MFC中调用ActiveX控件的问题
- 求救:vc如何读取xml文件内表格,并将表格写入Word中去?
{
/*考试内容: 完成YouFunction
要求:调用ObjFunction,原封不动的传递参数,返回结果*/
ObjFunction(sErrBuffer,...);
return;
}这样吗?
谢谢。
人家调用YouFunction的输入参数个数,是未知的。
人家也许调用 YouFunction(sErrBuffer,"Param1","Param2");
也许调用 YouFunction(sErrBuffer,"Param1","Param2","Param3","Param4");我们的函数怎么写?
把 ObjFunction 分成两个函数:int lowObjFunction(char *sErrBuffer,va_list Marker)
{
用va_arg( Marker,int) 或 va_arg( Marker,char) 或 va_arg( Marker,char *)
使用实参,完成实际功能;
}int ObjFunction(char *sErrBuffer,...)
{
va_list Marker;
int Flag; va_start(Marker,sErrBuffer);
Flag=lowObjFunction(sErrBuffer,Marker);
va_end(Marker); return Flag;
}调用者这样写:int YouFunction(char *sErrBuffer,...)
{
va_list Marker;
int Flag; va_start(Marker,sErrBuffer);
Flag=lowObjFunction(sErrBuffer,Marker);
va_end(Marker); ...... 其它代码部分
}
不过,好象原题不给修改ObjFunction函数,只要我们完成YouFunction。
如果这是一道考试题,估计是考学生的 va_list va_start 掌握情况.
{
/* 如题目无关,内容忽略 */
return 2;
}__declspec(naked) int func1(char *sErrBuffer,...)
{
__asm jmp offset ObjFunction
}int main(int argc, char* argv[])
{
func1("hello", "world");
return 0;
}
//#include <stdio.h>int ObjFunction(char *sErrBuffer,...)
{
/* 如题目无关,内容忽略 */
return 2;
}__declspec(naked) int func1(char *sErrBuffer,...)
{
__asm jmp offset ObjFunction
}int func2(char *sErrBuffer,...)
{
int res;
__asm
{
lea eax, res // get res address first push esi
push edi
push ecx
push ebp mov ebp, esp // save esp lea esi, sErrBuffer
mov ecx, eax
sub ecx, esi
sub esp, ecx
mov edi, esp
std
rep movsb
call ObjFunction
mov esp, ebp pop ebp
pop ecx
pop edi
pop esi
mov res, eax
}
return res;
}int main(int argc, char* argv[])
{
func1("hello", "world");
func2("hello", "world");
return 0;
}