您的位置:首页 > 编程语言 > C语言/C++

在VC6.0中创建和使用静态链接库&&C如何调用C++ 成员函数

2009-07-30 16:51 1021 查看
1.利用VC6.0创建静态链接库

  New-〉projects-〉Win32 Static Libaray 

新建好工程CreateStaticLib后,创建一个.h文件staticLib.h

 

 

#ifndef _STATIC_LIB_H__
#define _STATIC_LIB_H__
class staticLibTest
{
private:
int m_value;
public:
staticLibTest();
void SetVal(int para);
int GetVal();
void Display();
};
#endif /*_STATIC_LIB_H__*/
 

对应的.cpp文件fighting.cpp

#include <iostream.h>
#include "staticLib.h"
staticLibTest::staticLibTest()
{
m_value = 8;
}
void staticLibTest::SetVal(int para)
{
m_value = para;
}
int staticLibTest::GetVal()
{
return m_value;
}
void staticLibTest::Display()
{
cout<<"output value is:"<<m_value<<endl;
}
 

 

编译后,在Debug文件中便生成了CreateStaticLib.lib静态链接库...

 

2.创建中间层

wrap C++的成员函数,以便能够在C中调用这些成员函数,这里我们也将它作为静态链接库

 新建一个静态链接库工程过程和上面的一样,建好工程Static_Wrap后,新建头文件static.h

#ifndef _WRAP_H__
#define _WRAP_H__
#ifdef __cplusplus
extern "C" {
#endif

void ExtcSetVal(int para);
int ExtcGetVal();
void ExtcDisplay();

#ifdef __cplusplus
}
#endif
#endif
 

对应的.cpp文件fighting.cpp

 

#include "static.h"
#include "staticLib.h"
#pragma comment (lib, "CreateStaticLib.lib");
staticLibTest staticLibObj;
void ExtcSetVal(int para)
{
staticLibObj.SetVal(para);
}
int ExtcGetVal()
{
return staticLibObj.GetVal();
}
void ExtcDisplay()
{
staticLibObj.Display();
}
 

Notice:在编译这个工程之前要把1中的头文件staticLib.h和静态库CreateStaticLib.lib拷到当前目录下,

之后编译此工程,在Debug文件中生成了Static_Wrap.lib

3.编写测试工程

新建一个Win32 Console Application工程useStaticLibTest,新建fighting.cpp文件

#include <stdio.h>
#include "static.h"
#pragma comment (lib, "Static_Wrap.lib");
void main()
{
ExtcSetVal(98);
ExtcDisplay();
}
 

将之前生成的两个静态库CreateStaticLib.lib和Static_Wrap.lib还有头文件static.h拷到当前目录下,

编译运行即可

 

以上仅仅是个小的demo,继续学习中,加油...

 

纠正一个错误,刚刚在网上看到这样一句话:“静态链接库中不能再包含其它动态或者静态链接库,而动态链接库中则可再包含”,但是在上面生成Static_Wrap.lib中不就包含了一个静态链接库吗,感觉有些疑惑,后来试了试,将#pragma comment (lib, "CreateStaticLib.lib");这句话去掉,放到3中的测试代码中,也可以,大概那句话说得是对的,向我之前那种写法,虽然在生成static_wrap.lib的。cpp中包含了一个静态链接库,但实际生成的static_wrap.lib的大小小于createStaticLib.lib的,所以应该是没有包含...

有什么见解可以指出,希望不要误导你们,我都是试出来的..

 

 

 

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐