dll中使用exe中的变量

mac2022-06-30  19

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

最新回复(0)