ヘッダー#includeの情報と詳細を使用して、欠落している機能をソフトウェアから動的に呼び出すことで置き換える方法があります。 1 - 次のプロトタイプは、#includeである:
typedef float (* XPLMFlightLoop_f)(float inElapsedSinceLastCall, float inElapsedTimeSinceLastFlightLoop, int inCounter, void * inRefcon);
2 - 必要に応じて、あなたが埋めることができ、いくつかのconst:
const char *sDllPathName = "<Your XPLM_API DLL>.dll";
const char *sXPLMRegisterFlightLoopCallbackName = "XPLMRegisterFlightLoopCallback";
In order to confirm the sXPLMRegisterFlightLoopCallbackName
, you can use the freeware Dependency Walker and check name and format of the exported functions.
、3-外部関数のプロトタイプを宣言します。
Be aware to the calling convention __cdecl
or __stdcall
In the current case, the keyword XPLM_API
is defined in the XPLMDefs.h
as follow:
#define XPLM_API __declspec(dllexport) // meaning __cdecl calling convention
typedef void (__cdecl *XPLMRegisterFlightLoopCallback_PROC)(XPLMFlightLoop_f, float, void *);
、4- CL
#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-ちょうどあなたの説明の呼び出しを追加:お使いのソフトウェアでそれを呼び出すための一つの機能あなたはどちらの.lib(インポート・ライブラリー)も.defファイル(エクスポート定義)を持っている場合
...
XPLMRegisterFlightLoopCallback(callbackfunction, 0, NULL);
...
を、あなた少なくともどの機能がエクスポートされているかを知る必要があります(外部ソフトウェアによって使用される)。しかし、.dllから.libまたは.defを生成することができても、エクスポートされたすべての関数が完全に記述されている定義ヘッダーなしで.dllを使用することはできません(名前、パラメーターの型、結果の型...と呼び出し規約)では、.dllを使用することはできません。 –
@ J.Piquard私はヘッダーファイルを持っています。それはうまく動作しないリンカです。 – wizzwizz4
cソースコードをコンパイルするときに、このヘッダを追加しましたか?もしそうなら、あなたはどのような「解決されていない外部のシンボル」を手に入れましたか? –