自已写了一个类A,能够执行某些操作;在Dll工程中定义了另外一个类B,在类B中引用了类A的头文件,并声明了一个类A的成员变量。生成Dll和lib最后,提供给客户端C使用。客户端C在编译的时候,不仅需要上面的Dll、Lib、类B的头文件,而且还需要类A的头文件,否则就编译不过去。这个问题如何解决?怎样才不用给客户端提供类A的头文件?
//-------------------------------------------
类A、B的关系:
class 类A
{
public:
A();
~A();
...//成员函数
};////////////////////////
#include "类A.h"
class 类B
{
public:
类A m_***; //声明一个类A的成员变量
B();
~B();
...//成员函数
};//客户端---
#include "类B.h"
class 类C
{
public:
类B m_***; //声明一个类B的成员变量
C();
~C();
...//成员函数
};编译客户端C的时候会提示在类B中“类A m_***;”这句出错,类A未定义。
除非把类A的头文件也拷贝到客户端C的工程目录才能正常编译。
这个问题任何解决?
//-------------------------------------------
类A、B的关系:
class 类A
{
public:
A();
~A();
...//成员函数
};////////////////////////
#include "类A.h"
class 类B
{
public:
类A m_***; //声明一个类A的成员变量
B();
~B();
...//成员函数
};//客户端---
#include "类B.h"
class 类C
{
public:
类B m_***; //声明一个类B的成员变量
C();
~C();
...//成员函数
};编译客户端C的时候会提示在类B中“类A m_***;”这句出错,类A未定义。
除非把类A的头文件也拷贝到客户端C的工程目录才能正常编译。
这个问题任何解决?
隐式的话必须要.h
下面的示例是寻址调用示例(需要知道函数名及调用参数类型)CHAR *CResult;
HINSTANCE hModule;
typedef CHAR *(MyType)(CHAR *);
MyType* pfunMyType =NULL; //导入文件myDll.DLL
VERIFY(hModule = ::LoadLibrary("MyDll.dll"));//得到DLL中函数GetStr()的地址
try{
VERIFY(
pfunMyType =
(MyType*)::GetProcAddress(
(HMODULE) hModule, "GetStr")
); CHAR *ch; ch="EXE传过去的字符串";
CResult = (*pfunMyType)(ch); //得以DLL返回的字符串内容 }
// 释放DLL
catch(...)
{MessageBox("调用DLL中函数失败","错误",MB_OK|MB_ICONINFORMATION);}
FreeLibrary(hModule);