注意:输出目录为: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();
}

最新文章

  1. [asp.net core] Tag Helpers 简介(转)
  2. 用JavaScript实现的选项卡
  3. python 入门学习之环境搭载
  4. 【C#进阶系列】14 字符、字符串和文本编码
  5. centos7.x/RedHat7.x重命名网卡名称
  6. char,string和CString转换
  7. tomcat的安装
  8. POJ 1068 Parencodings 模拟 难度:0
  9. ios Swift 特性
  10. centos 系统程序包安装记录
  11. Hadoop之Pig安装
  12. Construct Binary Tree from Preorder and Inorder Traversal——LeetCode
  13. COJ 0359 xjr考考你数据结构(根号2)线段树区间增加
  14. 无线功率 mW 和 dBm 的换算
  15. super.getClass()与this.getClass()
  16. linux下安装libcurl及开源库的一般安装步骤
  17. js cookie存取
  18. octave基本指令4
  19. Shell - 简明Shell入门11 - 调用脚本(CallTheScript)
  20. 线程属性pthread_attr_t简介

热门文章

  1. 为什么少有人在Windows电脑上安OS X?
  2. 数据库连接池中是将connection放进threadlocal里的
  3. java读写锁实现数据同步访问
  4. Android开发,布局xml文件命名注意事项——不能包含任何大写字母
  5. Spring3.0.5jar包用法详解 [转载]
  6. Linux下C获取所有可用网卡信息
  7. windows服务器提权前请先执行systeminfo命令
  8. go语言基础之字符串类型 和 字符与字符串类型的区别
  9. hello-循环神经网络(RNN)原理
  10. 纯CSS(无 JavaScript)实现的响应式图像显示