mfc dll立即加载和卸载

时间:2014-08-22 23:36:23

标签: dynamic dll mfc loading

这次我正在搞乱动态dll加载。在处理了大量的链接器错误后,我终于得到了编译的东西,但是我的dll文件没有加载自己。我按照这里讨论的方式或多或少做了所有事情:http://www.programmingforums.org/thread21690.html 通常,我想创建一个在我准备和加载的dll中定义的类的对象。

使用dll的函数看起来像这样:

void CData::OnButton2()
{

HINSTANCE hDLL=NULL;               // Handle to DLL

typedef void (*GETDLLOBJECT)(IProcess**);
TRACE(_T("button2\n"));
hDLL = AfxLoadLibrary(_T("ImagePerspectiveComputation.dll"));
if (hDLL != NULL)
{
    TRACE(_T("library loaded\n"));
  GETDLLOBJECT StworzObjekt = (GETDLLOBJECT)GetProcAddress(hDLL,"CreateTheObject");
   if (!StworzObjekt)
   {
//       handle the error
//same irrelevant code here
   }
   else
   {
//same irrelevant code here too
   }

}else
    TRACE(_T("failed loading\n"));
}

我正在声明要导出的类的文件的.h文件:

#include <atlimage.h>
#include <afx.h>

#ifdef DLLMESSAGE
#define PORT __declspec(dllimport)
#else
#define PORT __declspec(dllexport)
#endif

using namespace std;


class PORT IProcess
{
public:
    IProcess(void);
    IProcess(CString fotka);
    virtual ~IProcess(void);
    virtual void SetImagePath(CString fotka);
    virtual CImage GetCorners(int* pointx,int* pointy,int* pointnumber,int blocksize,double ksize,int aperturesize);
    virtual void GetTransformMatrix(int pointnum, CPoint *input,CPoint *desired,double** result);
private:
    CString obraz;
};
extern "C" PORT void CreateTheObject(IProcess **objekt);

extern "C" PORT IProcess* CreateTheObjectParam(CString fotka);

没有错误或警告,但是我在输出部分得到了这个:

bylo!

BUTTON2

'PhotoInterface.exe':已加载'C:\ Users \ BART \ Documents \ Visual Studio 2010 \ Projects \ PhotoInterface1 \ PhotoInterface \ ImagePerspectiveComputation.dll',已加载符号。

'PhotoInterface.exe':已卸载'C:\ Users \ BART \ Documents \ Visual Studio 2010 \ Projects \ PhotoInterface1 \ PhotoInterface \ ImagePerspectiveComputation.dll'

加载失败

wszedl

这表明dll被加载和卸载,给我的hDLL等于NULL。 我的链接有问题吗?或者是因为我对dll的主要类没有做任何事情? (从CWinApp派生的那个)。除了一些可选的初始化代码(我忽略了)之外,我还没有看到任何关于用它做某事的必要性的文章。

我很感激任何建议。

编辑: 爱德华克莱门斯有很好的建议。起初我得到了错误126,这对我来说非常奇怪,因为拼写错误的dll名称不会给我加载 - 卸载消息。我确实运行了依赖walker并发现了一些问题:运行时缺少opencv dll(通过将它们放在同一个文件夹中暂时修复)以及缺少msvcp110d.dll和msvcr110d.dll

的更具挑战性

0 个答案:

没有答案