1、创建动态和静态链接库 lib
HINSTANCE LoadLibrary(LPCTSTR pLibFileName)
ZFXRenderer.cpp
ZFXRenderer.h // 创建,得到,释放
ZFXRenderDevice.h 用于定义接口
加载和释放链接库:
确保加载到内存中的dll只加载一次,如果另一个应用也在使用这个dll,确保内存有方法使
应用进入到dll。
有一个潜在的问题。可以通过它进入到dll内部,在运行时候查询输出方法的地址。
FARPROC GetProcAddress(HMODULE hModule,LPCTSTR lpProName);
通过这个方法可以得到dll内部方法的地址并且存这个地址到pointer (_CreateRenderDevice)
extern "C" {
HRESULT CreateRenderDevice(HINSTANCE hDLL, ZFXRenderDevice **pInterface);
typedef HRESULT (*CREATERENDERDEVICE)(HINSTANCE hDLL, ZFXRenderDevice **pInterface);
HRESULT ReleaseRenderDevice(ZFXRenderDevice **pInterface);
typedef HRESULT (*RELEASERENDERDEVICE)(ZFXRenderDevice **pInterface);
}
/**
* Create the dll objects. This functions loads the appropriate dll.
*/
HRESULT ZFXRenderer::CreateDevice(const char *chAPI) {
char buffer[300];
// decide which API should be used
if (strcmp(chAPI, "Direct3D") == 0) {
m_hDLL = LoadLibrary("ZFXD3D.dll");
if(!m_hDLL) {
MessageBox(NULL,
"Loading ZFXD3D.dll from lib failed.",
"ZFXEngine - error", MB_OK | MB_ICONERROR);
return E_FAIL;
}
}
else {
_snprintf(buffer, 300, "API '%s' not yet supported.", chAPI);
MessageBox(NULL, buffer, "ZFXEngine - error", MB_OK |
MB_ICONERROR);
return E_FAIL;
}