重点是如何调用:显示链接方式写的dll中的类、类的成员函数请指教!!!
急!!!!!!
刚才这个问题,我已经提过了。虽然没有解决彻底,但是我还是把分都给大家啦。这次我还会这么作,谢谢你的指教!!
急!!!!!!
刚才这个问题,我已经提过了。虽然没有解决彻底,但是我还是把分都给大家啦。这次我还会这么作,谢谢你的指教!!
解决方案 »
- 求教:我想就用Windows API来写游戏的标题画面
- 怎么在主对话框中操作子对话框控件所绑定的变量
- 请问当发生网络异常时,如何快速被检测到??
- 如何实现任务栏图标右键菜单功能
- 请教怎么样利用CCD来捕捉马路上行驶的汽车目标?不用感应线圈.紧急
- vs2003中怎样link .lib文件
- 哪位哥们or姐妹提供一个可以下到Modem通讯的AT指令集的网址
- 关闭新建对话框的问题。
- 请问如何在MFC中定义自己的消息?
- ATL做的复合控件中,使用CTabCtrl的派生类 派生类中不能接收 并处理TCN_SELCHANGE 事件
- 我新添加了一个类,而要在一个工程中用到这个类,我该如何在某个类中用到这个类?看看内容!谢谢!
- 初学C语言,哪一本书比较好?
dynclass.h:
#ifndef __DYNCLASS_H
#define __DYNCLASS_H#include <windows.h>#ifdef _DLL // assume this is defined when we build the dll
#define _DYNLINK __declspec( dllexport)
#else
#define _DYNLINK __declspec( dllimport)
#endifclass _DYNLINK CMyClass
{
public:
CMyClass ();
virtual ~CMyClass();
void DoSomethingUseful();
};
typedef void ( CMyClass::*PMYCLASSMETHOD)();
#ifndef _DLL
typedef CMyClass* ( *PFNCREATEMYCLASS)();
#else
_DYNLINK CMyClass* CreateMyClass()
{
return ( new CMyClass());
}
#endif#ifndef _DLL
typedef void ( *PFNDELETEMYCLASS)( CMyClass*);
#else
_DYNLINK void DeleteMyClass ( CMyClass* pObj)
{
delete pObj;
}
#endif#ifndef _DLL
typedef PMYCLASSMETHOD ( *PFNGETCLASSMETHOD)();
#else
_DYNLINK PMYCLASSMETHOD GetClassMethod ()
{
return &CMyClass::DoSomethingUseful;
}
#endif
#endif // ndef __DYNCLASS_Hdynclass.cpp:
#include <windows.h>
#include "dynclass.h"HINSTANCE g_hinstThisDll;
static BOOL g_bCrippledOS=FALSE;
static OSVERSIONINFO g_osviVerInfo;
extern "C" int APIENTRY DllMain(HINSTANCE hInstance,DWORD dwReason,LPVOID lpReserved)
{
BOOL bRC=TRUE;
if(DLL_PROCESS_ATTACH==dwReason)
{
g_hinstThisDll=hInstance;
g_osviVerInfo.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
GetVersionEx(&g_osviVerInfo);
if(VER_PLATFORM_WIN32_WINDOWS==g_osviVerInfo.dwPlatformId)g_bCrippledOS=TRUE;
}
return TRUE;
}
CMyClass::CMyClass ()
{
OutputDebugString("This is CMyClass::CMyClass()\n");
}
CMyClass::~CMyClass()
{
OutputDebugString("This is CMyClass::~CMyClass()\n");
}
void CMyClass::DoSomethingUseful()
{
OutputDebugString ( "This is CMyClass::DoSomethingUseful()\n");
}调用dll的例子:
#include <windows.h>
#include "dynclass.h"
int main(void)
{
PFNCREATEMYCLASS pfnCreateMyClass=0;
PFNDELETEMYCLASS pfnDeleteMyClass=0;
PFNGETCLASSMETHOD pfnGetClassMethod=0;
PMYCLASSMETHOD pDoSomethingUseful=0;
CMyClass* pMyClass=0;
HANDLE hDll=LoadLibrary("dynclass.dll");
if(INVALID_HANDLE_VALUE==hDll)return -1;
pfnCreateMyClass=(PFNCREATEMYCLASS)GetProcAddress(hDll,"CreateMyClass");
pfnDeleteMyClass=(PFNDELETEMYCLASS)GetProcAddress(hDll,"DeleteMyClass");
pfnGetClassMethod=(PFNGETCLASSMETHOD)GetProcAddress(hDll,"GetClassMethod");
if(pfnDeleteMyClass&&pfnCreateMyClass&&pfnGetClassMethod)
{
pMyClass=(pfnCreateMyClass)();
pDoSomethingUseful=(pfnGetClassMethod());
(pMyClass->*pDoSomethingUseful)();
(pfnDeleteMyClass(pMyClass));
}
FreeLibrary(hDll);
return 0;
}