注意:输出目录为: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. Caffe简单入门 AI

    https://yq.aliyun.com/articles/112207?spm=5176.100239.bloglist.58.wN003U

  2. this与JavaScrip中的四种调用模式

    this是什么 方法调用模式 构造器调用模式 函数调用模式 apply/call模式 this是什么 —In most languages, ‘this’ is a reference to the ...

  3. mysql知识点(二)

    1.什么叫聚集索引和非聚集索引? 答: 聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物理顺序.      聚集索引确定表中数据的物理顺序.聚集索引类似于电话簿,后者按姓氏排列数据.由于聚集索引规 ...

  4. 将Linux代码移植到Windows的简单方法

    一.前言 Linux拥有丰富各种源代码资源,但是大部分代码在Windows平台情况是无法正常编译的.Windows平台根本无法直接利用这些源代码资源.如果想要使用完整的代码,就要做移植工作.因为C/C ...

  5. 7.volatile关键字

    volatile:一个线程修改了某一个共享变量的值,其他线程也是否能够立即知道这个修改的 1.主要是让该“变量”在多个线程中可见,在java中每一个线程都有一块自己的工作区,其中就存放着所有线程“共享 ...

  6. 取出html中指定id的元素的内容

    private void btnGet_Click(object sender, EventArgs e) { string PageUrl = "http://www.cnblogs.co ...

  7. powerdesigner 16.5 破解步骤

    假设你的PowerDesigner已经安装完成.(PowerDesigner下载地址:http://pan.baidu.com/s/1mgqjmpa) 1. 从网上下载PowerDesigner165 ...

  8. 【Python】Django auth 修改密码如何实现?

    使用示例1.创建用户>>> from django.contrib.auth.models import User>>> user = User.objects.c ...

  9. 【python】Django设置SESSION超时时间没有生效?

    按手册和网上的方法在settings.py中设置“SESSION_COOKIE_AGE” 和 “SESSION_EXPIRE_AT_BROWSER_CLOSE” 均不生效. 通过查看django的源代 ...

  10. MongoDB 数据迁移 备份 导入(自用)

    MongoDB bin文件夹下 备份:mongodump -h IP:PORT -d 库名 -c 集合名 -o 存储路径 恢复:mongorestore -h IP:PORT -d 库名 -c 集合名 ...