我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: 如何调用dll中定义的一个全局变量? 显示签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

依然随意



性别: 帅哥 状态: 该用户目前不在线
等级: 前途无量
家族: ⊙JAY菊爱园⊙
发贴: 5922
威望: 0
浮云: 760
在线等级:
注册时间: 2006-09-25
最后登陆: 2022-10-30

5come5帮你背单词 [ pink /piŋk/ n. 粉红色,桃红色;a. 粉红色的 ]


如何调用dll中定义的一个全局变量?

偶在dll中写了一个栈类,然后在其中实例化,并把它当作dll的输出变量,
请问在加载此dll后,怎样用这个变量?
顶端 Posted: 2007-06-13 10:59 | [楼 主]
依然随意



性别: 帅哥 状态: 该用户目前不在线
等级: 前途无量
家族: ⊙JAY菊爱园⊙
发贴: 5922
威望: 0
浮云: 760
在线等级:
注册时间: 2006-09-25
最后登陆: 2022-10-30

5come5帮你背单词 [ festival /'festəvəl/ n. & a. 节日(的) ]


没人回呀?
在线等!!!
顶端 Posted: 2007-06-13 11:08 | [1 楼]
依然随意



性别: 帅哥 状态: 该用户目前不在线
等级: 前途无量
家族: ⊙JAY菊爱园⊙
发贴: 5922
威望: 0
浮云: 760
在线等级:
注册时间: 2006-09-25
最后登陆: 2022-10-30

5come5帮你背单词 [ series /'siəri:z/ n. 系列,序列 ]


Quote:
引用第2楼huangmao于2007-06-13 11:23发表的:
虫虫?我来顶你哈哈

谢谢黄毛.
顶端 Posted: 2007-06-13 11:25 | [2 楼]
依然随意



性别: 帅哥 状态: 该用户目前不在线
等级: 前途无量
家族: ⊙JAY菊爱园⊙
发贴: 5922
威望: 0
浮云: 760
在线等级:
注册时间: 2006-09-25
最后登陆: 2022-10-30

5come5帮你背单词 [ fan /fæn/ n. 风扇,狂热爱好者;扇 ]


Quote:
引用第8楼coolboy于2007-06-15 11:39发表的:

你的类到底是在dll中实例化的,还是在客户程序中实例化的?

显示加载只能加载函数和变量。你可以在dll中实例化一个对象,作为全局变量,然后通过GetProcAddress()的到变量的指针。显示加载不必包含库文件。

.......

是想在可执行模块中实例化dll模块中的类,
还有,如果是dll模块中已经实例化的类,怎样在可执行模块中访问喃?那个GetProcAddress()还可以获取变量呀?
顶端 Posted: 2007-06-15 12:03 | [3 楼]
依然随意



性别: 帅哥 状态: 该用户目前不在线
等级: 前途无量
家族: ⊙JAY菊爱园⊙
发贴: 5922
威望: 0
浮云: 760
在线等级:
注册时间: 2006-09-25
最后登陆: 2022-10-30

5come5帮你背单词 [ iron /'aiən/ n. 铁,熨斗;v. 熨,烫 ]


Quote:
引用第8楼coolboy于2007-06-15 11:39发表的:

你的类到底是在dll中实例化的,还是在客户程序中实例化的?

显示加载只能加载函数和变量。你可以在dll中实例化一个对象,作为全局变量,然后通过GetProcAddress()的到变量的指针。显示加载不必包含库文件。

.......

GetProcAddress()还可以获取变量地址呀?
顶端 Posted: 2007-06-15 12:19 | [4 楼]
依然随意



性别: 帅哥 状态: 该用户目前不在线
等级: 前途无量
家族: ⊙JAY菊爱园⊙
发贴: 5922
威望: 0
浮云: 760
在线等级:
注册时间: 2006-09-25
最后登陆: 2022-10-30

5come5帮你背单词 [ skip /skip/ v. 轻跳,跳跃,跳过,略去 ]


Quote:
引用第11楼coolboy于2007-06-15 13:10发表的:

你在dll中创建一个类指针,指向你实例化的那个对象,输出这个指针,就可以用GetProcAddress得这个到指针。
GetProcAddress()其实是通过符号名来获取地址的,用dumpbin查看dll的输出表,你就能看到你所属出的符号名了。
输出时建议遵循C调用约定,加上extern "C。

GetProcAdress()要两个参数,函数指针类型的一个实例,
如:typedef void (* pFunc)(int ,int);
  pFunc mfunc;
然后将mfunc传给它,但如果要将变量指针取出,调用主程序中怎么定义这个参数呀,
我开始传给它一个void*型的,但取回后,不能访问这个指针指向类的成员函数,
顶端 Posted: 2007-06-15 20:41 | [5 楼]
依然随意



性别: 帅哥 状态: 该用户目前不在线
等级: 前途无量
家族: ⊙JAY菊爱园⊙
发贴: 5922
威望: 0
浮云: 760
在线等级:
注册时间: 2006-09-25
最后登陆: 2022-10-30

5come5帮你背单词 [ restaurant /'restəront/ n. 餐馆,饭店 ]


Quote:
引用第13楼coolboy于2007-06-15 22:39发表的:

首先你要知道什么叫输出符号名,它就是GetProcAdress()的第二个参数,你可以用dumpbin -exports yourfile 查看你的dll的输出符号名。
比如我随便写的一个dll查看结果如下:

      1   0   00011410   ??0Cdll@@QAE@XZ
.......

你没有回答我的问题,我的问题是如下:
dll模块中:
class example.................................................................//定义一个类
{
//something and some methods
}
example* GetExample()
{example* pExample=new example; ..........................//new一个类实例;
}
dll.def中
LIBRARY
EXPORTS
GetExample
主程序中:
#include some files                     //没有将dll中定义类的头文件包进去.
int main()
{
typedef void(*pFunc)();                   //若为Example则不能识别,只能选void
加载dll;
获取函数地址;
//以上成功了;
调用指向GetExample()的函数指针,获取了一个指向example 类的指针(但实际是void型),
以上也成功了;;



接下来问题出现了;
我不能通过这个返回的指针访问example的成员函数,或成员变量;
}
就是上面的问题,怎么办呀?
我的前提是#include中不包含example类的头文件,应为如果包含,我就不用费这么大劲了,就不用dll了.



顶端 Posted: 2007-06-16 00:45 | [6 楼]
依然随意



性别: 帅哥 状态: 该用户目前不在线
等级: 前途无量
家族: ⊙JAY菊爱园⊙
发贴: 5922
威望: 0
浮云: 760
在线等级:
注册时间: 2006-09-25
最后登陆: 2022-10-30

5come5帮你背单词 [ fry /frai/ v. 油煎,油炸 ]


呵呵,原来不行...
多谢帮忙.
顶端 Posted: 2007-06-16 09:56 | [7 楼]
我来我网·5come5 Forum » 程序员之家

Total 0.020709(s) query 6, Time now is:07-16 14:57, Gzip enabled
Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号