导出c++全局对象

    今天,给公司代码大搬家,发现有个模块导出了全局对象。晕哪。如果非要使用一个全局对象,

可以定义一个函数,返回这个全局对象,再导出这个全局对象即可。现在的问题是,其它模块

不能找到导出的全局函数。但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 
#endif

class 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值