跟大家分享一个DLL导出类的使用

来源:互联网 发布:c语言指定位取反 编辑:程序博客网 时间:2024/05/16 05:06

折腾了好几个小时。
开发环境是:VS2010
1.首先建立了一个空解决方案(MyWork)
2.添加一个MFC工程,主要用来测试动态库(MyMfcTest)
3.然后建立一个动态库(MyDllTest),勾上MFC头文件使用,项目自动生成如下代码
.h文件是。其他代码可以删掉
#ifdef SERIALPORT_EXPORTS
#define SERIALPORT_API __declspec(dllexport)
#else
#define SERIALPORT_API __declspec(dllimport)
#endif
// 此类是从 MyDllTest.dll 导出的
class SERIALPORT_API CMyDllTest
{
     CMyDllTest(void);
};

.cpp文件是只保留如下代码:
#include "stdafx.h"
#include "MyDllTest.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

4.然后在类中添加一个测试方法
  .h文件中声明一个 CString test();
  .cpp文件中实现test方法代码如下
   CMyDllTest::test()
   {
      CString  temp = "abc你好00123";
      return temp;
   }
   在这个过程中发现 temp初始化那里报错,原因是属性那里要把字符改为多字节。
5.Debug生成,然后release生成


6.然后在MFC项目中在CMyMfcTest类中

  #include "../MyDllTest/MyDllTest.h"包含头文件
  然后链接库
  #ifdef _DEBUG
  #pragma comment(lib,"../Debug/MyDllTest.lib")
  #else
  #pragma comment(lib,"../Release/MyDllTest.lib")
  #endif

7.然后在InitInstance方法中声明类。然后使用方法test
 Debug生成的时候发现说使用外部符号,原因是在Debug模式下的属性---C++ ---代码生成---运行库,改为多线程DLL(/MD)
 生成成功,断点返回值正常
8。Realse模式下生成也是报错。原因与Debug有所区别,在属性中---C++ ---代码生成---运行库,要改为多线程(/MT)。配置属性--常规--MFC的使用,改为 使用标准 Windows 库。生成成功,断点返回值正常

希望大家看到这个帖子,少走弯路。如有不妥之处,欢迎指出。高手莫笑!