注意:输出目录为:Result共享目录

1、exe项目:

// EXE.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

extern"C"__declspec(dllexport) int num(9);

extern"C"__declspec(dllexport) int Sum();

extern"C"__declspec(dllexport) int Sum()
{
    num++;
    return num;
};

int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}

2、DLL.h      //win32 DLL

#pragma once
#ifdef DLLUSEEXE_EXPORTS
#define DLL_API _declspec(dllexport)
#else
#define DLL_API _declspec(dllimport)
#endif

//define DLL_API _declspec(dllexport)  // 报错时可替换上面

class DLL
{
public:
    DLL(void);
    ~DLL(void);
};

extern "C" DLL_API int GetNum();
extern "C" DLL_API int GetSum();

3、DLL.cpp

#include "StdAfx.h"
#include "DLL.h"

DLL::DLL(void)
{
}

DLL::~DLL(void)
{
}

#pragma  comment(lib,"Result\\EXE.lib")

extern"C"__declspec(dllimport) int num;

extern"C"__declspec(dllimport) int Sum();

extern "C" DLL_API int GetNum()
{
    int n = num + 1;
    return n;
}

extern "C" DLL_API int GetSum()
{
    int sum = Sum();
    return sum;
}

4、exe项目

// ExeUseDll.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "..\DLL.h"
#include <iostream>
using namespace std;

#pragma comment(lib,"..\\Result\\DllUseExe.lib")

int _tmain(int argc, _TCHAR* argv[])
{
    cout<<"num = "<<GetNum()<<endl;
    cout<<"sum = "<<GetSum()<<endl;
    int a;
    cin>>a;
    return 0;
}

参考: MFC

1、

在exe的源代码中定义
extern"C" __declspec(dllexport)wchar_t aaa[]=L"asd";
在dll中使用
wchar_t*aaa=(wchar_t*)GetProcAddress(GetModuleHandle(0),"aaa");
MessageBoxW(0,aaa,0,0);
就可以把asd显示出来

2、

在exe中
extern"C" __declspec(dllexport)wchar_t stuID[20]=L"";
……
MultiByteToWideChar(CP_ACP,0,g_ID,-1,stuID,20);//这是为将CString转换成wchar_t

在dll中
//取得主工程的登录ID
wchar_t *stuID = (wchar_t*)GetProcAddress(GetModuleHandle(0),"stuID");
//将wchar_t转换成CString
WideCharToMultiByte(CP_ACP,0,stuID,20,g_stuID.GetBuffer(0),20,NULL,NULL);

3、

假设exe的工程名为MFCTest
exe:
extern"C"__declspec(dllexport)CString aaa("aasd");
构建后在MFCTest.exe所在的目录中会有一个MFCTest.lib导入库,把它加入到dll工程的lib文件列表中
dll:
#pragma comment(lib,"MFCTest.lib")把MFCTest.lib复制到dll工程的目录,如果在工程配置中加入了MFCTest.lib就可以不要这一行
extern"C"__declspec(dllimport)CString aaa;
AfxMessageBox(aaa.GetBuffer(3),0,0);
CDllApp::CDllApp()
{
        AfxMessageBox(aaa.GetBuffer(3),0,0);
        aaa.ReleaseBuffer();
}

dll中使用exe中的变量的更多相关文章

  1. .NET Winform 将引用的dll文件集成到exe中(转)

    Winform程序经常需要引用一些第三方dll文件,这些dll在发布后与exe文件保存在同一目录下,虽然将dll文件集成到exe中会增大文件尺寸,但程序目录会相对整洁. 下面介绍一种比较简单的集成方法 ...

  2. vs 如何将dll打包到exe中

    方法如下:首先需要安装NuGet 然后安装Fody.Costura 重新启动vs 编译项目即可 虽然根目录下还生成了dll但是你的程序已经可以脱离dll运行了,其实是将你的dll打入了exe中你可以看 ...

  3. .NET 合并程序集(将 dll 合并到 exe 中)

    ------------恢复内容开始------------ ------------恢复内容开始------------ 背景:我们的应用程序通常都是由多个程序集组成,例如一个 exe 程序依赖于多 ...

  4. WPF程序将DLL嵌入到EXE的两种方法

    WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是<Visual Studio 版本转换工具WPF版开源了>的续,关于<Visual Studio 版本转换工具WPF版开源了 ...

  5. 其原因可能是堆被损坏,这说明**.exe中或它加载的任何DLL中有Bug

    最近在写一个写日志文件的线程时,调用了HeapAlloc/HeapFree 申请/释放堆缓冲内存.调用HeapFree释放有个条件就是,日志的空闲缓冲队列中内存块超过100个.在测试的时候,发现调用H ...

  6. C# 把引用的dll嵌入到exe文件中

    当发布的程序有引用其它dll, 又只想发布一个exe时就需要把dll打包到exe 当然有多种方法可以打包, 比如微软的ILMerge,混淆器附带的打包... 用代码打包的实现方式也有很好,本文只是其中 ...

  7. 中触发一个断点 其原因可能是堆被损坏,这说明 ***.exe 中或它所加载的任何 DLL 中有 Bug

    软件中使用了DevComponents.DotNetBar2.dll MessageBoxEx.Show("ddd");运行到这句出现这个错误 : 中触发一个断点 其原因可能是堆被 ...

  8. 其原因可能是堆被损坏,这也说明 xxx.exe 中或它所加载的任何 DLL 中有 bug

    1.代码如下: string src ="abcdabcd"; char* dst = new char[8]; strcpy(dst,src.c_str()); delete[] ...

  9. 皮肤和DLL和图片等项目文件完全整合到exe中

    C#开发的程序原生界面实在是太丑了,自己又没有美化天赋,所以只能使用皮肤控件了,网上找到了IrisSkin2,包含一个.dll文件和若干ssk后缀的皮肤文件,代码其实很简单的.但是后来发现个问题,就是 ...

随机推荐

  1. ios:设置视图背景图片的方法

    1. 使用一个UIImageView实例做子视图,并且放最后面UIImageView *customBackgournd = [UIImageView alloc] initWithImage:[UI ...

  2. HF Reader

  3. nodejs之处理GET请求

    一个简单的httpserver.接收get请求,并返回解析之后的数据. 以下是服务的代码: var http = require("http"); var url = requir ...

  4. setTimeout你知多少

    假期这么快就结束了,其实对我来说没什么影响,因为我一周才两节课,对于课多的同学来说,我天天在休假,不要羡慕哟~  但休假并不代表闲着,还是得苦逼的编代码,唉..一入程序深似海.. 不管学得多少,还是总 ...

  5. 安装VS组件提示“所选驱动不再有效。继续安装之前,请先检查安装路径的设置。”要怎么办?

    电脑里面原来装了VS2010,包括的组件有VB和C++,现在想添加C#,结果安装的时候就提示“所选驱动不再有效.继续安装之前,请先检查安装路径的设置”,安装路径在C盘,还有40个G,不知道该怎么办? ...

  6. java并发集合知识点(二)

    我们平时写程序需要经常用到集合类,比如ArrayList.HashMap等,但是这些集合不能够实现并发运行机制,这样在服务器上运行时就会非常的消耗资源和浪费时间,并且对这些集合进行迭代的过程中不能进行 ...

  7. android RecyclerView (二) ItemDecoration 详解

    RecyclerView 已经推出了一年多了,日常开发中也已经彻底从 ListView 迁移到了 RecyclerView,但前两天有人在一个安卓群里面问了个关于最顶上的 item view 加蒙层的 ...

  8. Java 反照机制中 getMethod()和getDeclaredField()区别

    Java 反射机制中 getMethod()和getDeclaredField()区别 今天在程序中用到java反射机制时,遇到的问题记录一下:我当时遇到的问题是,我用反射getMethod()调用类 ...

  9. 完整的ASP.NET存储过程分页,排序,鼠标移至变色

    首先建立一个存储过程如下(MySQL数据库):CREATE DEFINER=`root`@`localhost` PROCEDURE `pagination`(       in tbName var ...

  10. Hadoo生态中pHive HBase 项目的区别

    http://jenmhdn.iteye.com/blog/1678789 导读:Apache Hive是一个构建于Hadoop(分布式系统基础架构)顶层的数据仓库,Apache HBase是运行于H ...