链接到Pelles C中的DLL

我有一个218KB .dll和一个596KB .so文件,两个名字相同。 我想链接到.dll以避免链接器返回的“未解析的外部符号”错误,但我找不到链接到DLL文件的方法。

根据Pelles C论坛主题 ,我需要使用.def文件来创建.lib …但是我没有.def文件。 这个论坛主题展示了如何使用polink创建.lib ,所以我运行了polink /? 获得更多选择。 我注意到了一个/MAKEDEF选项,但是使用.dll.so运行它会给出“没有指定库文件”的致命错误。

我一直试图这样做三个小时,而且我没有想法。 我已经到了我的网络搜索发出我自己的帮助请求的程度。 必须有办法做到这一点……我怎样才能链接到.dll

通过标题#include和您的详细信息中的信息,可以通过从软件中动态调用它们来替换丢失的函数。 1-以下原型在#include中:

 typedef float (* XPLMFlightLoop_f)(float inElapsedSinceLastCall, float inElapsedTimeSinceLastFlightLoop, int inCounter, void * inRefcon); 

2-你可以根据需要填写的一些const:

 const char *sDllPathName = ".dll"; const char *sXPLMRegisterFlightLoopCallbackName = "XPLMRegisterFlightLoopCallback"; 

为了确认sXPLMRegisterFlightLoopCallbackName ,您可以使用免费软件Dependency Walker并检查导出函数的名称和格式。

3-声明外部函数的原型:

请注意调用约定__cdecl__stdcall

在当前情况下,关键字XPLM_APIXPLM_API中定义如下:

 #define XPLM_API __declspec(dllexport) // meaning __cdecl calling convention typedef void (__cdecl *XPLMRegisterFlightLoopCallback_PROC)(XPLMFlightLoop_f, float, void *); 

4-克隆函数以在软件中调用它:

 #include  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); ...