[偶是初学者]MFC传入调用DLL的问题
初学MFC,问题可能有些雷人,希望说的详细一点
还是上个贴子的问题,MFC的DLL,控制台搞不出来了,不得已,搞MFC(最恨给别人擦屁股)来调用DLL(那个DLL本来就是用MFC做的,至于他是怎么做的,偶是不知道,只说是测试通过了,他调用没有问题),先看代码(我今天才开始学MFC,自己写的东东):
#include <afxwin.h>
//DLL中要用到的函数
typedef BOOL (*PFUN_1)(CWnd* cWnd, CString dataPath);
typedef BOOL (*PFUN_2)(double dd_1, double dd_2, CString& outInfo);
typedef BOOL (*PFUN_3)();
//
//应用程序控制类
class CHallowApp : public CWinApp
{
public:
virtual BOOL InitInstance();
//加载动态库
private:
BOOL loadingData(CWnd *cWnd);
};
//全局变量
CHallowApp hallowApp;
//主窗体类
class CMainFrame : public CFrameWnd
{
CStatic* cs;
public:
CMainFrame(); //构造函数
};
BOOL CHallowApp::InitInstance()
{
m_pMainWnd = new CMainFrame();
this->loadingData(m_pMainWnd); //加载DLL
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
CMainFrame::CMainFrame()
{
Create(NULL,
"Hallow world!",
WS_OVERLAPPEDWINDOW,
CRect(0,0,200,200));
cs = new CStatic();
cs->Create("Hallow",
WS_CHILD|WS_VISIBLE|SS_CENTER,
CRect(50, 80, 150, 100),
this);
}
//加载DLL
BOOL CHallowApp::loadingData(CWnd *cWnd)
{
try
{
HMODULE hModule;
try
{
hModule = LoadLibrary("subjetUse.dll");
}
catch(...)
{
MessageBox(NULL, "load dll have mistakes.", "Error", MB_OK);
}
try
{
PFUN_1 initializeDLL = (PFUN_1)GetProcAddress(hModule, "InitAndLoadData");
CString dataPath = ".\\";
initializeDLL(cWnd, dataPath);
}
catch(...)
{
MessageBox(NULL, "use InitAndLoadData have mistakes.", "Error", MB_OK);
}
try
{
PFUN_2 lookForData = (PFUN_2)GetProcAddress(hModule, "GoQuery");
double dd_1 = 0; double dd_1 = 0; CString receiveInfo;
lookForData(longitude, latitude, receiveInfo);
}
catch(...)
{
MessageBox(NULL, "use GoQuery have mistakes.", "Error", MB_OK);
}
try
{
PFUN_3 getErrorInfo = (PFUN_3)GetProcAddress(hModule, "GetErrNote");
getErrorInfo();
}
catch(...)
{
MessageBox(NULL, "use GetErrNote have mistakes.", "Error", MB_OK);
}
FreeLibrary(hModule);
return true;
}
catch(...)
{
MessageBox(NULL, "STOP!!", "ERROR", MB_OK);
return false;
}
}
不加载那个动态库就不会出现问题,(其实加载并没有报错,很奇怪,就算我写的不存在的DLL名,它加载的时候也不会报错,就是hModule = LoadLibrary("subjetUse.dll"))这一句不会出错!可是,我只要一调用这个DLL中的函数就会出错,这个DLL对外的是三个函数,不是一个类,错误说我“强奸”了内存,我很郁闷哎,嘿嘿
信息:Unhandle exception in PracticeMFC_5.exe:0x00000005:Access Violation哪位高手帮我一下,把情况说细了,我是刚学MFC的,分不多了,以后分多了再散!