导出c++全局对象
来源:互联网 发布:linux开机启动过程信息 编辑:程序博客网 时间:2024/06/14 13:35
今天,给公司代码大搬家,发现有个模块导出了全局对象。晕哪。如果非要使用一个全局对象,
可以定义一个函数,返回这个全局对象,再导出这个全局对象即可。现在的问题是,其它模块
不能找到导出的全局函数。但exe块却可以。真是不可思议。
今天学习了一下导出全局对象,代码如下
//DllOne模块//global.h#pragma once#include "Tea.h"extern "C"{Tea tea;}//extern Tea tea;//不行
//DllOne模块//global.cpp#include "Tea.h"Tea tea;
//DllOne模块//tea.h#pragma once#ifdef DLLONEEXPORT#define DLLONEEXPORT __declspec(dllexport)#else#define DLLONEEXPORT #endifclass DLLONEEXPORT Tea{public:void PrintName();};//Tea.cpp#include "Tea.h"#include <iostream>using namespace std;void Tea::PrintName(){cout << "yuwu tea" << endl;}
并定义预处理器 DLLONEEXPORT
exe文件为
#include <iostream>#include "../DllOne/global.h"int main(){tea.PrintName();std::cin.get();return 0;};
发现不加
extern "C"时,exe会出现
main.obj : error LNK2001: 无法解析的外部符号 "class Tea tea" (?tea@@3VTea@@A)
看一下,dll导出的函数为??4Tea@@QAEAAV0@ABV0@@Z,根本不是同一个符号,出错就可以理解了。
但我使用的同样的编译器,怎么会编译出不同的符号呢?真是不理解。加上"C"就好了。
在DllOne中,只导出了tea这个全局对象,在导出表中这个对象表现为一地址(^_^,费话,只能导出地址)。
有时,也别难为编译器了。能简单写就简单写。
下载链接
http://download.csdn.net/source/3439912
- 导出c++全局对象
- 全局对象
- 全局对象
- 全局对象
- 全局对象
- C和C++对待全局对象的一个不同之处
- 关于全局对象
- VB全局对象
- C++ 全局对象
- C++ 全局对象初始化
- JavaScript 全局对象
- C++ 全局对象
- VB中的全局对象
- Node.js 全局对象
- Nodejs 几个全局对象
- JavaScript 全局对象
- Node.js 全局对象
- Node.js全局对象
- jquery的validate验证
- Linux基本命令大全
- 对开发中常见的内存泄露,GDI泄露进行检测
- 使用开源项目OScache进行页面的缓存应用
- JUnit入门
- 导出c++全局对象
- struts下通过过滤器进行权限控制
- 使用.NET向webService传double、int、DateTime 服务器得到的数据时null的问题
- HOOPS模块之 HOOPS/3dGS
- select replace(t.area_name,' ','') a from dic_area t where t.area_code = '131127'
- WeakHashMap相关(转)
- linux网络体系结构
- C#事件(event)解析
- 大端和小端、hton*和ntoh*