|
9楼
发表于 2018-2-8 16:05:04
|
只看该作者
河南省平顶山市
c++ 一样可以调用 易的模板,他只不过把过程简化了。之前有人问过,c+如何调用ec 我把代码 粘出来你就明白了 int easycall2(PFN_EXECUTE_CMD cmd,char* Format,...)
{
MDATA_INF RetData;
RetData.m_dtDataType = SDT_INT;
MDATA_INF ArgInf[30];
va_list args;
va_start(args, Format);
int xxxx=0;
char ch='\0';
while (ch=*(Format++))
{
if (ch == '%')
{
ch = *(Format++);
if (ch == 's')
{
ArgInf[xxxx].m_pText=va_arg(args,char*);
ArgInf[xxxx].m_dtDataType=SDT_TEXT;
} else if (ch == 'd')
{
ArgInf[xxxx].m_int=va_arg(args,int);
ArgInf[xxxx].m_dtDataType=SDT_INT;
}
xxxx++;
}
}
va_end(args);
// 调用“信息框”函数
cmd(&RetData, 3, &ArgInf[0]);
return 0;
}
void UseEDlg::OnBnClickedButton3()
{
HMODULE hMod = LoadLibrary(".\\krnln.fne");
PFN_GET_LIB_INFO GetNewInf = (PFN_GET_LIB_INFO)GetProcAddress(hMod, "GetNewInf");
PLIB_INFO pLibInfo = GetNewInf();
PCMD_INFO pCmdInfo = pLibInfo->m_pBeginCmdInfo;
PFN_EXECUTE_CMD *pFnExecuteCmd = pLibInfo->m_pCmdsFunc;
for(int i=0; i<pLibInfo->m_nCmdCount; i++)
{
OutputDebugStringA(pCmdInfo.m_szName);
if( strcmp(pCmdInfo.m_szName, "信息框") == 0 )
{
PFN_EXECUTE_CMD fnMsgBox = pFnExecuteCmd;
easycall2(fnMsgBox,"%s%d%s","hello2",2,"title");
}
}
FreeLibrary(hMod);
}
|
|