MFC 关于动态库DLL引用CDialog的关键点

,在MFC的应用开发中,经常会遇到将部分功能以DLL动态库的方式进行封装调用,在调用的过程中应注意以下几点

1 设置当前资源句柄

在DLL中查找资源文件时,如需要将当前资源文件的handle设置成dll模块的hinstance.

AfxGetResourceHandle() 查看当前资源句柄

AfxSetResourceHandle() 设置当前资源句柄

GetModuleHandle(“dll文件名”);

例示:

HINSTANCE h1 = AfxGetResourceHandle();
HMODULE hMod = GetModuleHandleA("activex.ocx");
if (hMod == NULL) hMod=GetModuleHandleA("activex.dll");
AfxSetResourceHandle(hMod);

2 在dll中调用activex时,需要进行com初始化与容器设置

OleInitialize(NULL); COM接口初始化

AfxEnableControlContainer() 允许应用程序作为控件容器来使用。

目前遇到的问题,基本为以上两点,以后有新的发现会继续补充

MFC 关于动态库DLL引用CDialog的关键点

时间: 2024-10-26 01:32:44

MFC 关于动态库DLL引用CDialog的关键点的相关文章

MFC的亚博静态库.lib、体育动态库.dll以及Unicode库示例

MFC亚博静态库使用下列体育命名约定: uAFXcWd.LIB . 库命名约定的说明符如下: 说明符 值和含义u (n) ANSI 或 (u)Unicodec 创建的计划类型:c=alld d=debug版本; release版本略去说明符默认值为生成用于 Intel 平台的调试版本 windows ANSI 应用程序的静态库:NAFXCWD.Lib. 下表列出的所有库是在 \ atlmfc \ lib 目录中包含预生成的静态库. 静态链接库命名约定: 库 说明NAFXCW.LIB MFC 静态

MFC规则动态库

一.概述 "是MFC的"意味着可以在这种DLL的内部调用MFC类库中的内容:"是规则的"意味着它不同于MFC扩展DLL,在MFC规则DLL的内部虽然可以调用MFC类库,但是其与应用程序的接口不能是MFC,而MFC扩展DLL与应用程序的接口可以是MFC,可以从MFC扩展DLL中导出一个MFC类的派生类:规则DLL能够被所有支持DLL技术的语言所编写的应用程序调用,当然也包括使用MFC的应用程序. 二.分类 MFC规则动态库分为: ①作为静态链接的MFC规则DLL 该D

OS X 下动态库的引用

foo.c #include <stdio.h> void foo(void) { printf("foo.\n"); } main.c #include <stdio.h> extern void foo(void); int main(void) { foo(); printf("main.\n"); return 0; } 编译执行 $ gcc -dynamiclib foo.c -o libfoo.dylib (-dynamiclib

基于Qt的动态库*.dll文件创建

有时候在做项目的时候我们需要将自己编写的类封装起来,Qt提供了一个很好的封装途径.下面将详细讲述一个简单的库的制作过程,最后再创建另外一个工程,在这个工程里面对封装的库进行调用,从而完成一个dll库从创建到调用的过程.谢谢大家指正! 第一步:先制作一个库文件. 1.首先新建一个工程,工程选项如下,我们要创建一个基于qmake的C++共享库. 2.选择库的类型和存放路径. 3.在"hellolib.cpp"中添加如下的代码,让库函数输出一行文字. 4.点击左下角的编译,如果没有错误就生成

动态库DLL中类的使用

一.DLL中类的导出 在类名称前增加 _declspec(dllexport)定义,例如: class _declspec(dllexport) CMath{ .... }; 通常使用预编译开关切换类的导入导出定义,例如: #ifdef DLLCLASS_EXPORTS #define EXT_CLASS _declspec(dllexport) //DLL #else #define EXT_CLASS _declspec(dllimport) //使用者 #endif class EXT_C

c++跨动态库DLL的内存分配与释放问题

先说结论: 1.如果两个DLL(或者EXE调用DLL)的CRT链接均为MD,则可以跨动态库分配和释放,如果一个是MT,另外一个是MD则会有问题. 2.利用虚函数的动态绑定技术,动态绑定分配释放内存的new和delete等,可以解决这个问题,例如shared_ptr.但如果shared_ptr包装是vector等类型,在调用和被调用中都涉及到vector的修改的话,仍然会有问题,因为两个地方都会有释放和分配. 似乎最好的办法还是用原始指针加数组长度的方式传递. 参见下面两个文章. 1.跨DLL的内

C#调用c++的动态库dll演示例程

1.首先编写c++动态库 extern "C" __declspec(dllexport) int __stdcall add(int x, int y) { return x + y; } extern "C" __declspec(dllexport) extern "C"使得在C++中使用C编译方式成为可能.在"C++"下定义"C"函数,需要加extern "C"关键词.用exte

qt使用动态库(DLL)

本文主要讲解在QT开发环境中如何使用VC生成的DLL及QT自身生成的DLL.至于其它情况本文不作讨论. 连接库分为2种 (1)动态连接库,通常有.h .lib .dll三个文件,功能实现在dll中 (2)静态连接库,通常有.h .lib二个文件,功能实现在lib中 由上可以看出动态库的lib和静态库的lib文件是不同的. 如果使用生成连接库的开发环境与使用连接库的开发环境相同,一般不会出什么问题,如VC写的连接库 (包括动态库和静态库)还在VC中用一般不会有什么问题的.有时候我们需要DLL跨开发

关于32位和64位部署出现C#调用delphi动态库DLL不成功的问题

由于项目中调用了动态库,这些动态库放在C:\Windows\System32下面,但是当部署到了64位的机器上可能就有问题了,最近这个问题就纠结了半天,在本机32为系统上测试动态调用ddl成功了,部署到64位Window Server2008上面也没问题,可是为什么到了64位的WIN7系统上出了问题呢?        最后才发现原来原来是DLL的位置不对,那么DLL到底该放到那呢?        如果细心的你,你会发现在C:\Windows\目录下面有两个文件夹:System目录和System3