MFC的dll编程3个有关问题-导出对话框类

MFC的dll编程3个问题--导出对话框类
最近想把经常用到的对话框封装在dll里,然后以后若用到的话就不用那么麻烦每次都编了,但是编写过程中遇到了一些问题~

第一个问题!最重要滴:
首先用MFC标准dll编写,把对话框什么的编写好之后,自己编写调用接口来实现生成对话框,生成对话框的函数第一句加上AFX_MANAGE_STATE(AfxGetStaticModuleState());,但发现这样很麻烦,于是想用mfc扩展dll导出整个对话框类,然后调用。
但是在编写的过程中我就疑惑了。
首先导出的这个类继承于CDialog,它用到的ID资源是保存在resource.h里的,这个类的头文件肯定会#incude "resource.h",如果导出这个类的话,假设叫(CDllDlg)那么肯定要把它的头文件给主程序,主程序里肯定也会有一个resource.h,这两个肯定会发生问题吧,那么这时怎么办呢?
难道要手动把dll的资源ID改成和主程序不一样的?
------------------------------------------
问题2:
extern "C" __declspec(dllexport)是标准c,那它的函数可以用引用或者一些类吗?
如下这种类型
C/C++ code
extern "C" __declspec(dllexport) bool GetString(CString& str ,int& nCount);

我发现可以,编译也过,实现也没什么问题,就是不知有没有隐患
------------------------------------------
问题3:
还有就是我想得到一个不定长度的数组,一开始我用vector传参,发现不工作
如:
C/C++ code
extern "C" __declspec(dllexport) bool GetData(vector<double>& data);

然后传个指针在dll里new,更不行了,
最后我是暂时存在dll的变量里,如在dll里建立了一个vector<double> g_data;然后在用一个函数获得内容

C/C++ code
void GetData(double* pData,int nCount)
{
 int i(0);
 for(i=0;i<nCount;i++)
 {
   pData[i] = g_data.at(i);
 }
}

这样到可以,但是感觉很浪费内存~还要新建一个中间变量来缓冲,不知有什么好方法

------解决方案--------------------
1.个人认为AFX_MANAGE_STATE(AfxGetStaticModuleState())比你导出对话框类不麻烦;
2.可以
3.你可以提供两个接口
int GetDataCount();
double GetDataByIndex(int index);
DLL中使用一个数组来记录数据,然后通过上面的接口传递数据
------解决方案--------------------
1、如果你的对话框是通用对话框那应该不存在这个问题吧,只做一个调用接口能保证对话框显示即可,不存在资源ID的问题
2、这种定义是规范调用约定,你可以看看这个http://baike.baidu.com/view/2315027.htm
3、这种情况,应该在外面申请空间,把指针和长度传进去,用完了还是在外面释放,也就是谁申请谁释放
------解决方案--------------------
探讨

使用MFC扩展DLL比较方便。在DLL中重新声明一下资源ID,注意和resource.h里的值一致就行。

------解决方案--------------------
探讨
引用:

在MFC扩展DLL中你添加对话框资源,什么也不做会提示你找不到IDC_xxx。
这时你在对话框头文件直接
#define IDC_xxx 123
就可以了。
其实好多动态创建窗口什么的不是也要随便指定一个ID供Window识别的吗。

我是担心自己定义的#define IDC_xxx 123和主程序的某id相同,#define IDC……