c动态链接库:C++动态链接实验



// ast.h///////////////////

_declspec(dllexport)IFastString
{
public:
virtual void Delete(void) = 0;
virtual Length(void) = 0;
virtual Find(const char *psz) = 0;
};

extern "C"
IFastString *CreateFastString(const char *psz);
////////////////////////////////////////////////////////////


// ast.h ///////////////////

#"ast.h"

FastString:public IFastString
{
private:
const m_cch; //number of character
char *m_psz;
public:
FastString(const char *psz);
~FastString(void);
Length(void);
Find(const char *psz);
void Delete(void);
};
/////////////////////////////////////////

// fast.cpp//////////////////////
#<>
#"fast.h"

IFastString *CreateFastString(const char *psz)
{
FastString(psz);
}

FastString::FastString(const char* psz):m_cch(strlen(psz)),
m_psz( char[strlen(psz)+1])
{
strcpy(m_psz, psz);
}

FastString::~FastString(void)
{
delete m_psz;
}

void FastString::Delete(void)
{
delete this;
}

FastString::Length(void)
{
m_cch;
}

FastString::Find(const char *psz) //the function is not complete
{
1;
}

///////////////////////////////////////////////////////////////////////////

// Test.cpp////////////
#"ast.h"
#<iostream>

using std;

f(void)
{
n = -1;
IFastString *pfs = CreateFastString("Hi Bob");
( pfs->Find("g") )
{
cout<<" test success! "<<endl ;
}
2;
}

( )
{
m;
m = f;
cout<<m;

0;
}
////////////////////////////////////////////


在Fast.DLL中除了个入口的外其它所有入口都是虚接口类总是通过保存在vbtl中指针被间接客户不需要在开发时候链接这些符号名这意味着接口思路方法可以不受“区别编译器的间符号名改编方式区别影响”需要通过名字显式链接入口是CreateFastString,这个全局使得客户可以进入到FastString世界中这个使用extern “c”被引出从而避免了符号名改编方式冲突这也隐含着所有C编译器都期盼引入库和DLL引出同样符号 使用这项技术个直接结果是 我们可以安全个C环境中暴露DLL中并且在另个C开发环境中访问这个类对于建立个和编译器厂商无关可重用组件来说 这种能力是非常重要
Tags:  动态光弹实验 动态路由配置实验 动态链接库c语言 c动态链接库

延伸阅读

最新评论

发表评论