怎样访问静态链接中的类

tangerwendy 2009-03-23 10:36:28
各位高人,请问怎么调用静态lib中的class?
比如lib中有class a;
分别有函数体A1,A2,A3。
怎样调用A2呢,调用前是不是要实例化a?
...全文
132 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangerwendy 2009-03-25
  • 打赏
  • 举报
回复
楼上说的很对,a、b、c三个类是反汇编跟踪出来。
目前看没有什么好的方法了。
tangerwendy 2009-03-24
  • 打赏
  • 举报
回复
class a 具体结构内容我不清楚,因为没有源代码。
上面class a 的内容是我举例说明的。
现在难点就是怎么定义这样的class A。
DoctorWeir 2009-03-24
  • 打赏
  • 举报
回复
如果库中的是导出类,就要实例化;如果不是导出类可以直接调用
DoctorWeir 2009-03-24
  • 打赏
  • 举报
回复
如果库中的是导出类,就要实例化;如果不是导出类可以直接调用
w_anthony 2009-03-24
  • 打赏
  • 举报
回复
只要声明了class a的结构, 你就可以直接用就可以了。
假设,lib.h里面有
class a
{
A1();
A2();
A3();
int a_1;
int a_2;
};
你自己的代码里面,包含了lib.h以后,就可以

a aa;
aa.A1();
aa.A2();
aa.A3();

如果没有这样的lib.h,你可以自己随便找个地方写一下,反正只要让编译器知道class a的正确结构就行了。
tangerwendy 2009-03-24
  • 打赏
  • 举报
回复
代码太多了,我简单描述lib的结构:
lib中类:a,b,c
class a
{
A1();
A2();
A3();
int a_1;
int a_2;
}

class b
{
a m_a;
int b_1;
int b_2;
B1(int);
B2(int){
m_a.A2(int);
}
}

class c
{
b m_b;
int c_1;
C1(int);
C2(int){
m_b.B2(int);
}
}

输出函数lib.cpp中:
int setC(int s1)
{
c cm;
cm.C2(s1);
}

int GetC()
{
c cm;
return cm.C1();
}

头文件lib.h 中定义了信息:
int GetC();
int setC(int s1);


w_anthony 2009-03-24
  • 打赏
  • 举报
回复
可以告诉LZ的是,如果这个类a不在静态库里面,你就会知道它怎么用的话,那么它在静态库里面,你也用相同的方法去用它就行了。
不过如果这个假设的前提都不满足,当我啥也没说好了……
tangerwendy 2009-03-24
  • 打赏
  • 举报
回复
可以确定的是a类不是static的。所以运行A2(1)是不正确的;
w_anthony 2009-03-24
  • 打赏
  • 举报
回复
你是说a的类声明都没有吗?如果没有的话,你怎么用a,你又如何通过编译?
如果有a的类声明,你直接用不就可以了吗?
不知道你什么意思,还是把与a相关部分的代码贴出来吧……
tangerwendy 2009-03-24
  • 打赏
  • 举报
回复
另外,可定位lib中的A2函数的地址,
通过typedef int (WINAPI *A2_)(short);
A2_ A2 = 0x343444;//lib 中A2的地址是 0x343444。
然后运行A2(1);
这样也可以运行,但是我担心a中成员变量没有初始化或存在其他问题,导致程序不正常工作。
tangerwendy 2009-03-24
  • 打赏
  • 举报
回复
头文件是有的,但是头文件中没有涉及到a的类。
a的类只是头文件输出函数中的小模块,现在想检查a工作是否正常。
有没有方法:定义一个类b,这个类指向lib中a,也就是a的映射。
这样调用模块操作b,就等于操作a。
ringphone 2009-03-24
  • 打赏
  • 举报
回复
静态库有头文件就可以了,把库加进工程跟普通编程没什么区别,唯一的区别就是可能没有源代码。
w_anthony 2009-03-24
  • 打赏
  • 举报
回复
静态lib不需要_declspec(dllimport)之类的,只要有声明,以及#pragma comment(lib, "xxx.lib")链接到库就行了。
如果库是离职人员留下的,有lib,那么也应该有相应的.h文件。
tangerwendy 2009-03-24
  • 打赏
  • 举报
回复
谢谢楼上两位的回复,
实话说,库是离职人员留下的,源代码没有留下,
所以比较痛苦,不能修改库,不能加入_declspec(dllexport),也不知道是不是static函数。
w_anthony 2009-03-24
  • 打赏
  • 举报
回复
class a的具体结构不清楚的话,你怎么断定存在class a这么东西的?
根据你的例子,你应该只有lib.h那两个导出文件,那么a、b、c三个类是你反汇编跟踪出来的?
在不知道a的具体结构的情况下,没有常规解决方法。
hust_terry 2009-03-23
  • 打赏
  • 举报
回复
如果是static方法就不需要实例化。
wanjingwei 2009-03-23
  • 打赏
  • 举报
回复
把A2前面添加_declspec(dllexport),然后在调用的函数里用_declspec(dllimport),

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧