使用标题#include 中的信息和您的详细信息,这是一种通过从您的软件中动态调用它们来替换缺失函数的方法。1-以下原型在 #include 中:
typedef float (* XPLMFlightLoop_f)(float inElapsedSinceLastCall, float inElapsedTimeSinceLastFlightLoop, int inCounter, void * inRefcon);
2-您可以根据需要填写一些常量:
const char *sDllPathName = "<Your XPLM_API DLL>.dll";
const char *sXPLMRegisterFlightLoopCallbackName = "XPLMRegisterFlightLoopCallback";
为了确认sXPLMRegisterFlightLoopCallbackName
,您可以使用免费软件Dependency Walker并检查导出函数的名称和格式。
3-声明外部函数的原型:
注意调用约定__cdecl
或__stdcall
在当前情况下,关键字XPLM_API
定义XPLMDefs.h
如下:
#define XPLM_API __declspec(dllexport) // meaning __cdecl calling convention
typedef void (__cdecl *XPLMRegisterFlightLoopCallback_PROC)(XPLMFlightLoop_f, float, void *);
4-克隆函数以在您的软件中调用它:
#include <windows.h>
void XPLMRegisterFlightLoopCallback(XPLMFlightLoop_f inFlightLoop, float inInterval, void * inRefcon)
{
HINSTANCE hInstDLL;
XPLMRegisterFlightLoopCallback_PROC pMyDynamicProc = NULL;
// Load your DLL in memory
hInstDLL = LoadLibrary(sDllPathName);
if (hInstDLL!=NULL)
{
// Search for the XPLM Function
pMyDynamicProc = (XPLMRegisterFlightLoopCallback_PROC) GetProcAddress(hInstDLL, sXPLMRegisterFlightLoopCallbackName);
if (pMyDynamicProc != NULL)
{
// Call the XPLM Function with the orignal parameter
(pMyDynamicProc)(inFlightLoop,inInterval,inRefcon);
return;
}
}
// Do something when DLL is missing or function not found
}
5-只需添加您描述的调用:
...
XPLMRegisterFlightLoopCallback(callbackfunction, 0, NULL);
...