在VC6.0中创建和使用静态链接库&&C如何调用C++ 成员函数
2009-07-30 16:51
1021 查看
1.利用VC6.0创建静态链接库
New-〉projects-〉Win32 Static Libaray
新建好工程CreateStaticLib后,创建一个.h文件staticLib.h
对应的.cpp文件fighting.cpp
编译后,在Debug文件中便生成了CreateStaticLib.lib静态链接库...
2.创建中间层
wrap C++的成员函数,以便能够在C中调用这些成员函数,这里我们也将它作为静态链接库
新建一个静态链接库工程过程和上面的一样,建好工程Static_Wrap后,新建头文件static.h
对应的.cpp文件fighting.cpp
Notice:在编译这个工程之前要把1中的头文件staticLib.h和静态库CreateStaticLib.lib拷到当前目录下,
之后编译此工程,在Debug文件中生成了Static_Wrap.lib
3.编写测试工程
新建一个Win32 Console Application工程useStaticLibTest,新建fighting.cpp文件
将之前生成的两个静态库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的,所以应该是没有包含...
有什么见解可以指出,希望不要误导你们,我都是试出来的..
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的,所以应该是没有包含...
有什么见解可以指出,希望不要误导你们,我都是试出来的..
相关文章推荐
- 函数调用缺少参数列表;请使用“&****Dlg::getThread”创建指向成员的指针”--多线程函数调用
- static函数 函数调用缺少参数列表;请使用“&XXX”创建指向成员的指针;类的static成员函数
- 函数调用缺少参数列表;请使用“&Student::Printf”创建指向成员的指针 问题解析
- error C3867: “A::fun1”: 函数调用缺少参数列表;请使用“&A::fun1”创建指向成员的指针
- error: 函数调用缺少参数列表;请使用“&BinTree<char>::_PrintNode”创建指向成员的指针
- “Caculate::writehtml”: 函数调用缺少参数列表;请使用“&Caculate::writehtml”创建指向成员的指针
- error C3867: “Point::getX”: 函数调用缺少参数列表;请使用“&Point::getX”创建指向成员的指针
- “error C3867: “XXX”: 函数调用缺少参数列表;请使用“&XXX”创建指向成员的指针”的错误
- “error C3867: “XXX”: 函数调用缺少参数列表;请使用“&XXX”创建指向成员的指针”的错误
- C++语言笔试题目 C++中为什么用模板类&& 类中如何使用const &&函数重载,我们靠什么来区分调用的那个函数?靠返回值判断可以不可以
- c++调用类内部使用成员变量和inline函数的区别
- 使用纯C函数指针调用C++的类成员函数
- 如何在C++中创建可被Blueprint调用的全局函数
- 巧妙解决问题:&CMFCcodeDlg::RunCommands”创建指向成员的指针。MFC多线程调用要求调用的接口必须是全局函数或静态成员函数
- java中如何使用JNI调用C++写的函数
- 多线程开发要点1:如何使用类的成员函数创建线程
- 【ASP.NET】如何使用类创建公共函数,在不同ASP.NET页面间重复调用
- C++中,如何定义和使用指向成员函数的指针
- 使用纯C函数指针调用C++的类成员函数
- C++对象布局及多态之虚成员函数如何调用