CLR:CLR常用简写词语,CLR是公共语言运行时,Common Language Runtime)和Java虚拟机一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收集),并保证应用和底层操作系统之间必要的分离。

MFC调用C#的.dll时的配置方式:

一、使用 /clr 编译 MFC 可执行文件或规则 DLL

1、打开“项目属性”对话框,方法是右键单击“解决方案资源管理器”中的项目并选择“属性”。

2、展开“配置属性”旁边的节点并选择“常规”。在右侧窗格中的“项目默认值”下,将“公共语言运行库支持”设置为“公共语言运行库支持 (/clr)”。

3、在相同的窗格中,确保将“MFC 的使用”设置为“在共享 DLL 中使用 MFC”。

4、在“配置属性”下,展开“C/C++”旁边的节点并选择“常规”。请确保将“调试信息格式”设置为“程序数据库 /Zi”(而不是“/ZI”)。

5、在“配置属性”下,选择“C/C++”,然后选择“代码生成”。请确保将“运行时库”设置为“多线程调试 DLL (/MDd)”或“多线程 DLL (/MD)”之一。

二、在代码引用需要的dll

#using <mscorlib.dll>

#using "DownloaFiles.dll" //换成需要的dll文件

using namespace System;

using namespace CGistarMath;//换成dll中类所使用的namespace

namespace: 名字空间
我想说的跟一楼的大哥说的差不多,不过需要补充一下
--如果你学过Java的话或许他的话你能看懂,但没学过的话,我还有一个更好的解释
namespace相当于windows操作系统中的文件夹,因为现在的程序大多都是大项目
或是代码不是一个人来完成的,难免会有变量声明时出现重名的现象,
比如程序员A定义了一个变量x程序员B也定义了一个x,
这时为了精确定位是哪个x用namespace加以限制就可以了,
比如A的x在一个叫 proA的名字空间里,
B的在proB的名字空间里那么对x定位时可以直接用proB::x或proA::x来表示具体的x,
是不是和windows里的c:\programe files和d:\programe files很相似呢,就这个原理啦~
相当于java里面的包。
 

三、在dll函数调用代码前加入#pragma managed

#pragma unmanaged

这是manage和unmanage混合编程在MFC下的一种实现方式。

以下是我自己碰到的问题的总结:

当我在声明一个变量的时候,是在.H文件的类里面声明: CGistarMath^ CSPro;

但是编译的时候会出现这个错误:

error C3265: 无法声明托管“CSPro”(在非托管“CMathCPPDlg”中)

不能声明全局或静态变量,也不能声明引用 gc 堆中对象的本机类型成员

因此,我只能讲CGistarMath^ CSPro修改成 CGistarMath^ CSPro = gcnew CGistarMath();并且放入函数的实现当中,才将该问题解决,但是有个缺点就是需要使用到该DLL的函数都要自己生成一个对象,比较麻烦,也容易造成资源浪费。

自定义序列化4 (MFC调用C#的.dll)的更多相关文章

  1. MFC调用c#的dll

    一.使用 /clr 编译 MFC 可执行文件或规则 DLL 1.打开“项目属性”对话框,方法是右键单击“解决方案资源管理器”中的项目并选择“属性”. 2.展开“配置属性”旁边的节点并选择“常规”.在右 ...

  2. 可以供MFC调用的,QT实现的DLL(使用qt-solutions的qtwinmigrate实现)

    MFC和QT的消息循环机制不同,所以,要让QT写的DLL可以供MFC调用,要做一点特殊的处理 #include <qmfcapp.h> #include <qwinwidget.h& ...

  3. 可以供MFC调用的,QT实现的DLL(qtwinmigrate实现)

    MFC和QT的消息循环机制不同,所以,要让QT写的DLL可以供MFC调用,要做一点特殊的处理 #include <qmfcapp.h> #include <qwinwidget.h& ...

  4. vs2010下C++调用lib或dll文件

    注: DLL:表示链接库,包含dll,lib文件: dll: 表示my.dll文件 lib: 表示my.lib文件 C++ 调用.lib的方法: 一: 隐式的加载时链接,有三种方法 1  设置工程的 ...

  5. .Net Core 自定义序列化格式

    序列化对大家来说应该都不陌生,特别是现在大量使用WEBAPI,JSON满天飞,序列化操作应该经常出现在我们的代码上. 而我们最常用的序列化工具应该就是Newtonsoft.Json,当然你用其它工具类 ...

  6. c++builder调用VC的dll以及VC调用c++builder的dll

    解析__cdecl,__fastcall, __stdcall 的不同:在函数调用过程中,会使用堆栈,这三个表示不同的堆栈调用方式和释放方式. 比如说__cdecl,它是标准的c方法的堆栈调用方式,就 ...

  7. 基础命名空间:序列化_自定义序列化 System.Runtime.Serialization

    (  (From Msdn) 自定义序列化是控制类型的序列化和反序列化的过程,通过控制序列化,可以确保序列化兼容性.换而言之,在不中断类型核心功能的情况下,可在类型的不同版本之间序列化和反序列化. 重 ...

  8. Python调用C# Com dll组件实战

    之前公司有套C# AES加解密方案,但是方案加密用的是Rijndael类,而非AES的四种模式(ECB.CBC.CFB.OFB,这四种用的是RijndaelManaged类),Python下Crypt ...

  9. Java Serializable接口(序列化)理解及自定义序列化

      1 Serializable接口 (1)简单地说,就是可以将一个对象(标志对象的类型)及其状态转换为字节码,保存起来(可以保存在数据库,内存,文件等),然后可以在适当的时候再将其状态恢复(也就是反 ...

随机推荐

  1. 【bzoj1531】[POI2005]Bank notes 多重背包dp

    题目描述 Byteotian Bit Bank (BBB) 拥有一套先进的货币系统,这个系统一共有n种面值的硬币,面值分别为b1, b2,..., bn. 但是每种硬币有数量限制,现在我们想要凑出面值 ...

  2. tcp协议 tcpip协议 http协议,IP,DNS,端口号

    每当看到HTTP协议,tcp/ip协议,TCP协议总是蒙圈:在这里先记录一下,方面自己查看 TCP协议:TCP(Transmission Control Protocol 传输控制协议)是一种面向连接 ...

  3. 【WC2019笔记】模拟费用流算法

    在一条数轴上,有 $n$ 只老鼠和 $m$ 个老鼠洞. Q1 每只老鼠都只能往左走,求所有老鼠都进洞的最小代价(代价就是所有老鼠走的距离和). 每个洞只能进一只老鼠. A1 一开始陈江伦老师没说每个洞 ...

  4. hdoj 1175 连连看

    连连看 Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  5. 自己写的页面加载进度条jquery插件

    (function ($) { var progressId = "progress" + Math.round(Math.random() * 100) var progress ...

  6. Android Studio 项目代码运行正常,但是代码爆红处理记录

    系统上运行Android项目时,编译正常但是代码爆红,很烦.处理方法记录: clean 项目,执行build. 运行invalidate cache / restart 重启项目. 找到项目.idea ...

  7. Mysql varchar长度问题

    http://dinglin.iteye.com/blog/914276 http://www.cnblogs.com/fakis/archive/2011/03/07/1976532.html   ...

  8. codevs——1267 老鼠的旅行(棋盘DP)

    1267 老鼠的旅行 2012年CCC加拿大高中生信息学奥赛  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description ...

  9. Maximum Product Subarray - LeetCode

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  10. Jenkins+ProGet+Windows Batch搭建全自动的内部包(NuGet)打包和推送及管理平台

    这一篇文章是继http://www.cnblogs.com/EasonJim/p/5954155.html的升级版,由于CCNET已经过时,所以我把打包过程的CCNET工具换成Jenkins去实现,批 ...