求问,MFC中,一个DLL和DLL的头文件怎样在一个项目中的多个CPP文件中使用,头文件中有很多全局变量。

如题所述

1. “DLL的头文件”是个模糊概念,其实应该包含“DLL模块自己用的头文件”和“给DLL以外的模块用的头文件”,但一般地,通过条件编译开关,都把这两个文件合并在一起。

2. 给DLL以外的模块用的“DLL的头文件”中不要“定义”全局变量,而应该“声明”全局变量。

3. DLL中用的全局变量应该在DLL模块内定义。(无论是DLL的cpp文件或在“DLL模块自己用的头文件”中)

下面给个例子。(例子中将“DLL模块自己用的头文件”和“给DLL以外的模块用的头文件”合并在一起)

A。DLL的cpp文件:(dlltest.cpp)
#define DLL_EXPORT //这是编译DLL模块本身 或编译其他使用者的开关
#include "dlltest.h"
long g_count = 0;
int dllmul(int i, int j) { g_count++; return i*j; }

B。DLL的头文件:(dlltest.h)
#ifndef DLL_TEST
#define DLL_TEST
#ifndef DLL_EXPORT
extern "C" __declspec(dllimport) int dllmul(int i, int j);
extern __declspec(dllimport) long g_count;
#else
extern "C" __declspec(dllexport) int dllmul(int i, int j);
extern __declspec(dllexport) long g_count;
#endif
#endif

C。使用上述DLL的程序
#include "dlltest.h"
#include "stdio.h"
int main(){
printf("The count is %d\n",g_count);
printf("5*6=%d\n",dllmul(5,6));
printf("The count is %d\n",g_count);
getchar();
return 0;
}

最后提醒:如果有多个线程或进程使用你的DLL模块,注意共享变量和共享保护。可以看看Jetfrey Richter写的《Windows核心编程》
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-01-24
全局变量一般都是在cpp中定义的。
例如:
xx.h

extern int number;

xx.cpp

int number = 0;

这样,其他文件包含xx.h就不会报错了

求问,MFC中,一个DLL和DLL的头文件怎样在一个项目中的多个CPP文件中使用...
1. “DLL的头文件”是个模糊概念,其实应该包含“DLL模块自己用的头文件”和“给DLL以外的模块用的头文件”,但一般地,通过条件编译开关,都把这两个文件合并在一起。2. 给DLL以外的模块用的“DLL的头文件”中不要“定义”全局变量,而应该“声明”全局变量。3. DLL中用的全局变量应该...

怎样在MFC中调用C#编写的DLL
回答:2、展开“配置属性”旁边的节点并选择“常规”。在右侧窗格中的“项目默认值”下,将“公共语言运行库支持”设置为“公共语言运行库支持 (\/clr)”。3、在相同的窗格中,确保将“MFC 的使用”设置为“在共享 DLL 中使用 MFC”。 4、在“配置属性”下,展开“C\/C++”旁边的节点并选择“常规...

请问下MFCEXE调用DLL为什么要在EXE里包含DLL的头文件呢
我们平常的程序函数代码声明在头文件,函数体在.cpp文件。而DLL头文件相当于DLL里面函数的声明。只不过函数体在DLL文件里面而已。

一个DLL文件主函数 WinMain(...);我该怎样在MFC里面调用,建立DEF文件...
DLL文件入口函数,就是你所说的主函数不能被其他可执行模块直接调用,在加载这个dll的时候,会自动执行(会有2次执行)。我们一般调用的是dll导出的函数。

MFC中有哪几种dll,有什么区别
mfc71u.dll MFCANS32.DLL MFCD42D.DLL MFCD42UD.DLL MFCN42D.DLL MFCN42UD.DLL MFCO42D.DLL MFCO42UD.DLL mfcsubs.dll mfcuia32.dll mfcuiw32.dll --- 主要分两种。名字带 D.DLL 的和不带 D 的, 带 D 的 用于 DEBUG, 不带 D 的 用于 RELEASE.

mfc或DLL中能不能有不同类中处理相同的一个消息?
SendMessage 的第一个参数 是一个窗口HWND, 你这个控件只需要得到 拥有这个控件的窗口, 或者你详的父窗口, 然后向这个HWND投递消息就可以了. 如果你不能区别出HWND, 就只有加一些状态的代码来区分.

请问大侠我编写的MFC程序需要的DLL,我该怎样把它加入到我的程序包里面...
dll一般不能直接加到程序里,像你这种情况一般都是把程序和dll打包放在一起发布的。dll对减少单个程序的大小没什么帮助,只是方便更新和在多个程序公用一个dll 的时候减少硬盘负担

...2017,C++MFC免注册调用大漠插件图文教程,一步一步来详细版。_百度知...
开始步骤如下:打开VS2017,新建一个MFC应用程序,选择基于对话框模板,创建完成。移除界面默认组件,添加一个按钮并生成。在项目属性中,通过类向导添加自定义类,选择MFC类型库,定位到dm.dll文件,并将其包含进来。将Idmsoft类移动到项目中,自动生成的头文件会随之出现。在头文件中,修改为#import "...

VC中.系统提供头文件.h和实现文件cpp编译时是如何产生关联的?
mfc中CWnd包括其他类的成员方法真正的实现代码大部分是在动态链接库mfc42.dll中,你在使用mfc类库时除了包含afxwin.h头文件,还链接了mfc42.lib这样一个库文件(在afx.h头文件中 #pragma comment(lib,"mfc42.lib")),在链接阶段这些库文件会告诉链接程序(cl.exe)真正地实现代码在哪,这样你生成的...

请问mfc程序怎么调用C#的DLL文件呐 在控制台程序中可以用 但是在mfc...
1.建议首先load,不调用接口,确认加载了在调用dll的接口。谁知道要不要安装net啊,没玩过

相似回答