15,471
社区成员
发帖
与我相关
我的任务
分享
context.m_pNewViewClass = RUNTIME_CLASS(CVideoView);
if (!m_wndSplitter1.Create(
&m_wndSplitter, // our parent window is the first splitter
2, 2, // TODO: adjust the number of rows, columns
CSize(10, 10), // TODO: adjust the minimum pane size
&context,
WS_CHILD|WS_VISIBLE|SPLS_DYNAMIC_SPLIT|WS_HSCROLL|WS_VSCROLL,
m_wndSplitter.IdFromRowCol(2, 0)))
{
TRACE("Failed to create the nested dynamic splitter\n");
}
#ifdef DLL_B_EXPORTS
#define DLL_B_API __declspec(dllexport)
#else
#define DLL_B_API __declspec(dllimport)
#endif
class DLL_B_API CVideoView : public CView
{
...//声明
}
DLL_B_API BOOL XXOO(......);
extern DLL_B_API long g_lLenth;
然后确保:
1、B项目的‘预处理器”属性中加入 DLL_B_EXPORTS,其他任何项目不能加入该宏
2、DLL_B_API这个名字得唯一的,不要重复
这么一来,不就能控制是expot还是impot了吗?
另外,你仔细想一想,按照你那个解决方法,如果我有一个C DLL也要用B,你是不是还得在C项目中再重写一遍,先不谈麻烦不麻烦,仅耦合性这一点,也太大了些吧?[/quote]
嗯 对的 谢谢 开始按照我说的去改A的预处理设置 改完后C.DLL调用A的时候又要改C的 然后就要改好多好多。。。
确实这样做就没问题了 非常感谢
不过比较郁闷的是我将这个宏定义到我的B.DLL的stdafx中 结果B编译没问题 A编译的时候错误提示B中的每个类都找不到DLL_B_API 实在蛋疼 只能在每个类中声明了一遍 不知道是VC++6.0的问题还是怎么滴。。。
#ifdef DLL_B_EXPORTS
#define DLL_B_API __declspec(dllexport)
#else
#define DLL_B_API __declspec(dllimport)
#endif
class DLL_B_API CVideoView : public CView
{
...//声明
}
DLL_B_API BOOL XXOO(......);
extern DLL_B_API long g_lLenth;
然后确保:
1、B项目的‘预处理器”属性中加入 DLL_B_EXPORTS,其他任何项目不能加入该宏
2、DLL_B_API这个名字得唯一的,不要重复
这么一来,不就能控制是expot还是impot了吗?
另外,你仔细想一想,按照你那个解决方法,如果我有一个C DLL也要用B,你是不是还得在C项目中再重写一遍,先不谈麻烦不麻烦,仅耦合性这一点,也太大了些吧?