dll中使用exe中的变量
注意:输出目录为: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中的变量的更多相关文章
- .NET Winform 将引用的dll文件集成到exe中(转)
Winform程序经常需要引用一些第三方dll文件,这些dll在发布后与exe文件保存在同一目录下,虽然将dll文件集成到exe中会增大文件尺寸,但程序目录会相对整洁. 下面介绍一种比较简单的集成方法 ...
- vs 如何将dll打包到exe中
方法如下:首先需要安装NuGet 然后安装Fody.Costura 重新启动vs 编译项目即可 虽然根目录下还生成了dll但是你的程序已经可以脱离dll运行了,其实是将你的dll打入了exe中你可以看 ...
- .NET 合并程序集(将 dll 合并到 exe 中)
------------恢复内容开始------------ ------------恢复内容开始------------ 背景:我们的应用程序通常都是由多个程序集组成,例如一个 exe 程序依赖于多 ...
- WPF程序将DLL嵌入到EXE的两种方法
WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是<Visual Studio 版本转换工具WPF版开源了>的续,关于<Visual Studio 版本转换工具WPF版开源了 ...
- 其原因可能是堆被损坏,这说明**.exe中或它加载的任何DLL中有Bug
最近在写一个写日志文件的线程时,调用了HeapAlloc/HeapFree 申请/释放堆缓冲内存.调用HeapFree释放有个条件就是,日志的空闲缓冲队列中内存块超过100个.在测试的时候,发现调用H ...
- C# 把引用的dll嵌入到exe文件中
当发布的程序有引用其它dll, 又只想发布一个exe时就需要把dll打包到exe 当然有多种方法可以打包, 比如微软的ILMerge,混淆器附带的打包... 用代码打包的实现方式也有很好,本文只是其中 ...
- 中触发一个断点 其原因可能是堆被损坏,这说明 ***.exe 中或它所加载的任何 DLL 中有 Bug
软件中使用了DevComponents.DotNetBar2.dll MessageBoxEx.Show("ddd");运行到这句出现这个错误 : 中触发一个断点 其原因可能是堆被 ...
- 其原因可能是堆被损坏,这也说明 xxx.exe 中或它所加载的任何 DLL 中有 bug
1.代码如下: string src ="abcdabcd"; char* dst = new char[8]; strcpy(dst,src.c_str()); delete[] ...
- 皮肤和DLL和图片等项目文件完全整合到exe中
C#开发的程序原生界面实在是太丑了,自己又没有美化天赋,所以只能使用皮肤控件了,网上找到了IrisSkin2,包含一个.dll文件和若干ssk后缀的皮肤文件,代码其实很简单的.但是后来发现个问题,就是 ...
随机推荐
- (转)H264通过RTMP发布 V2.0 (Red5 Wowza 测试通过)
直接上代码 // demo.cpp : 定义控制台应用程序的入口点.//#include "stdafx.h"#includeextern "C"{#inclu ...
- 数据库中MCO
约束条件指该字段取值的约束条件,“ M ”表示必填.“ C ”表示条件必填.“ O ”表示可填,以下含义同
- 独立成分分析 与 功能连接之间的关联尝试 by 张高燕
在处理fMRI数据时,使用空间ICA的方法. 将一个四维的fMRI数据分解为空间pattern与时间序列的乘积. //这里的pattern=component 其中每一pattern的时间序列 ...
- Android 下文件cannot execute - Permission denied
安卓下执行交叉编译的可执行文件发现提示不允许. 原因是mount的方式问题,root后运行 su mount -o rw,remount /mnt/sdcard 就可以了 mount -o rw,re ...
- koa2搭建服务器+使用mongoose链接mangodb
使用node搭建服务器,用到了现在比较流行的框架koa. 1.初始化package.json npm init -y 2.安装koa2 npm i koa --save 3.搭建服务器 const K ...
- iOS:上线的基本流程
1.创建唯一标书符App ID 首先打开开发者网站,进入证书页面,我们点击Identifiers下边App IDs选项,然后点击右上角加号,如图: 2.申请发布证书 我们点击Certificates下 ...
- exchange 升级顺序导致的邮件被发不出的问题?
最近在做一个项目POC,准备升级过程目前的2007 环境到exchange 2010,由于客户环境是exchange 2007 sp1 不满足升级的基本条件,我们必须将exchange 2007 sp ...
- java学习笔记11--集合总结
java学习笔记系列: java学习笔记10--泛型总结 java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Ob ...
- Servlet对文件的读写操作
(1)怎样在serlvet中读取文件的内容 package com.tsinghua; import java.io.*; import javax.servlet.http.*; public cl ...
- import MySQLdb UserWarning
Finished processing dependencies for MySQL-python==1.2.5 ╭─haoke@haokedeMBP ~/ProgramFiles/MySQL-pyt ...