如何在非MFC扩展Dll中导出class说明及简单例子(注意,是显式链接方式)相关源码如下:
dll工程中的DllClass.h 内容:
//此处在dll的头文件中为 dllexport,在应用文件中为dllimport
#define DLLCLASS_API __declspec(dllexport)//导出一个类(包括其方法、属性)
class DLLCLASS_API CDllClass {
public:
 CDllClass(void);
 void MSG(const char * const str);
};dll工程中的DllClass.cpp内容:
#include "stdafx.h"
#include "DllClass.h"BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
      )
{
    switch (ul_reason_for_call)
 {
  case DLL_PROCESS_ATTACH:
  case DLL_THREAD_ATTACH:
  case DLL_THREAD_DETACH:
  case DLL_PROCESS_DETACH:
   break;
    }
    return TRUE;
}
CDllClass::CDllClass()

 return; 
}void CDllClass::MSG(const char * const str)
{
  MessageBox(NULL,str,"",MB_OK);
}Dll测试工程中的DllClass.h内容:
//此处在dll的头文件中为 dllexport,在应用文件中为dllimport
#define DLLCLASS_API __declspec(dllimport)//导出一个类(包括其方法、属性)
class DLLCLASS_API CDllClass {
public:
 CDllClass(void);
 void MSG(const char * const str);
};
Dll测试工程中DllClassTest.cpp内容:
首部:
#include "DllClass.h"
class DllClass;代码部分:
 CDllClass  CTest;
 CTest.MSG("this is a string into dll");
以上是(借一位兄弟的代码)隐式方法,请大家帮忙把以上代码改成显式链接调用,谢谢,一定买单.

解决方案 »

  1.   

    类不能采取显式调用的方法,如果真要这样,可以考虑采用com
      

  2.   

    把这个类全做成纯虚函数,在应用程序中包含这个类,申请一个此类的指针。
    在DLL中做个接口,传递这个类的指针的指针,在这个接口中用new申请对象。
    这样在应用程序中就可以调用了。
    其实DLL形式的COM就是这样做的。
      

  3.   

    其实,我的目的很简单,也就是像MFC里的CString一样,可以随意调用.(我不太清楚MFC42.dll是不是用的是隐式调用)
      

  4.   

    lianglp的做法比较通用
    我自己用过一种办法就是使用单件技术使类只有一个实例,并提供接口访问类的各种方法
    不过归根到底,这种方法其实还是访问方法函数而不是类了
      

  5.   

    看来,我又要把com搞搞了,呵呵.谢谢大家,老板,买单.