LoadLibrary和GetProcAddress获取另一个项目中的函数
Contents
- 0.0.1 因为项目NGeoXData在项目NGeoXGPS之前编译,故通过加载dll的方法获取设计分析的Levels。
 - 0.0.2 (1)在项目NGeoXData中的CGPSDataMain.cpp中添加:
 - 0.0.3 (2)在项目NGeoXData中的CResultDataMain.h中添加:
 - 0.0.4 (3)在项目NGeoXData中的CResultDataMain.cpp中添加:
 - 0.0.5 扩展:
 - 0.0.6 使用Dependency Walker工具查看Dll是否编译该函数:
 - 0.0.7 (1)找到项目路径Dubug下的Win32文件夹中找到NGeoXGPS.dll,
 - 0.0.8 (2)查找GetDesignModelLevelsGlobal,若编译成功,会产生类似这样的函数:_GetDesignModelLevelsGlobal@0
 
- 1 相关文章
 
因为项目NGeoXData在项目NGeoXGPS之前编译,故通过加载dll的方法获取设计分析的Levels。
(1)在项目NGeoXData中的CGPSDataMain.cpp中添加:
#include "HeaderPre.h"
EXTERN_C __MY_EXT_CLASS__ int GetDesignModelLevelsGlobal()
{
    if (!CGPSDataMain::GetInstance())
    {
        return 0;
    }
    CIntArray levelIndexArr;
    return CGPSDataMain::GetInstance()->GetDesignModelLevels(levelIndexArr);
}
#include "HeaderPost.h"
(2)在项目NGeoXData中的CResultDataMain.h中添加:
typedef int (*GetDesignModelLevelsFun)();
(3)在项目NGeoXData中的CResultDataMain.cpp中添加:
CTypedPtrArray ResultDrawingGPSArr;
HMODULE hXGPSHandle = ::LoadLibrary("NGeoXGPS.dll"); 
if (hXGPSHandle)
{
    FARPROC pFun = GetProcAddress(hXGPSHandle, "GetDesignModelLevelsGlobal");
    if (pFun)
    {
        GetDesignModelLevelsFun pGetFun = (GetDesignModelLevelsFun)pFun;
        int levelCount = pGetFun();
        CString strTitle;
        for (int iLevel = 0; iLevel < levelCount; iLevel++)
        {
            
        }
 <code data-enlighter-language="cpp" class="EnlighterJSRAW">   }
}</code>
扩展:
使用Dependency Walker工具查看Dll是否编译该函数:
(1)找到项目路径Dubug下的Win32文件夹中找到NGeoXGPS.dll,
将文件拖拽到Dependency Walker界面:

(2)查找GetDesignModelLevelsGlobal,若编译成功,会产生类似这样的函数:_GetDesignModelLevelsGlobal@0



