注意:输出目录为: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. ffmpeg的IO操作

    ffmpeg 可以通过IO操作将数据读取和存储在文件或网络中 作为数据的读取和写入地址,数据被存放在file,http, ffmpeg 不仅可以编解常用的音视频格式,还可以将数据导入/导出到各种媒介中 ...

  2. Linux操作系统的种种集成开发环境

    Linux操作系统的种种集成开发环境 随着Linux的逐渐兴起,已经有为数众多的程序在上面驰骋了,许多开发环境(Development Environment)也应运而生.好的开发环境一定是集成了编辑 ...

  3. scp遇到路径中有空格

    sudo scp root@1.1.1.1:/test/soft/123/Microsoft SQL Server 2000.iso .      错误! sudo scp root@1.1.1.1: ...

  4. [Mac OS] Homebrew简介及安装wine

    Homebrew官网 http://brew.sh/index_zh-cn.html Homebrew是神马 linux系统有个让人蛋疼的通病,软件包依赖,好在当前主流的两大发行版本都自带了解决方案, ...

  5. 如何判断linux使用的是HDD还是SSD、HHD;磁盘阵列RAID

    硬盘种类:SSD固态硬盘.HDD机械硬盘.HHD混合硬盘(里面既有机械硬盘也有固态硬盘,固态硬盘用来高速缓存,机械硬盘用来存储). HHD是机械硬盘和固态硬盘的结合体.我们可以理解为其就是两块硬盘,固 ...

  6. jenkins错误413 Request Entity Too Large<

    jenkins-nginx--sonar1/sonar2

  7. [转] 菜鸟手脱VMP,附上脱壳过程和自己写的脚本,可跨平台

    转载:http://www.52pojie.cn/thread-467703-1-1.html 工作需要要脱一个VMP壳,我是一个从来没接触过脱壳的人.瞬间那种心情遇到的人应该都知道!没办法硬着头皮找 ...

  8. [置顶] JDK工具(一)–Java编译器javac

    1.概述    javac.exe: Java编译器,将Java源代码转换成字节码. 2.用法    javac <选项> <源文件> (使用过程中发现,javac <源 ...

  9. java学习笔记6--类的继承、Object类

    接着前面的学习: java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) java学习笔记2--数据类型.数组 java学习笔记 ...

  10. Android -- ContentProvider与联系人

    数据库                                                                                         读联系人 raw ...