我在这里使用此代码:
include "windows.h"
#include "stdio.h"
#include <conio.h>
#pragma comment(lib, "StubDLL.lib")
// StubDLL defines as __declspec(dllexport) Add and Function
#include "StubDLL.h"
// just to try it with MS Function
__declspec(dllimport) HANDLE WINAPI GetCurrentProcess(void);
/*
this is done in StubDLL.h
extern "C"
{
__declspec(dllimport) int Add(int a, int b);
__declspec(dllimport) void Function(void);
}
*/
int main()
{
Function();
std::cout << Add(32, 58) << "\n";
HANDLE test = GetCurrentProcess();
printf("%d \n", test);
return 0;
}
现在,根据: https ://msdn.microsoft.com/en-us/library/aa271769(v=vs.60).aspx :
__declspec(dllimport) 提示编译器后端调用的函数驻留在外部 DLL 中,因此不应生成间接调用(FF 15 ...),这意味着不会间接调用蹦床...
在查看反汇编时,Function()、Add() 和 GetCurrentProcess() 会导致间接远调用,这是不应该发生的,因为我明确地给编译器提示不要发出“FF15”但插入“E8” .
显然我错过了某事。这里...有什么提示吗?(项目设置为 VS 2015,发布版本,无增量链接,大小超过速度,针对大小进行优化)