您的位置:首页 > 其它

dll中使用exe中的变量

2013-07-30 11:04 417 查看
注意:输出目录为: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();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: