注意:输出目录为: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(); }
转载于:https://www.cnblogs.com/shenchao/p/3224669.html