15,471
社区成员
发帖
与我相关
我的任务
分享
DWORD WINAPI TestShow(LPVOID lpParameter)
{
while(1)
{
Sleep(1000);
OutputDebugString("Test Sleep");
}
return 0;
}
EXTERN_C void TestFun()
{
//OutputDebugString("TestFun");//============就是这里出错了
//MessageBox(0,"TestFun","成功",0);
::CreateThread(NULL,0,TestShow,NULL,0,NULL);
return ;
}
BOOL APIENTRY DllMain( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
AsmFun();
break;
}
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
extrn TestFun:proc
.CODE
AsmFun PROC
call TestFun
ret
AsmFun ENDP
END
extern TestFun:proc
.CODE
AsmFun PROC
jmp TestFun ;这里改jmp可以调用成功
ret
AsmFun ENDP
END
话说这个调用约定怎么设置
extern "C" void __fastcall TestFun(); //cpp里可以这样设置
但asm文件里根本编译不过去
这个是我asm文件自定义的生成命令行:ml64 /Fo $(IntDir)%(fileName).obj /c %(fileName).asm
参考以前的.model flat,stdcall 改.model flat,fastcallcall 也不行 .model ml64根本不认识啊啊啊 业余选手就是这样 基本语法不懂啊
求各位大神补充