您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> C/C++ >> VC60源码中让外部DLL作为资源文件并调用

VC60源码中让外部DLL作为资源文件并调用

来源:网络整理     时间:2016/9/2 2:46:45     关键词:

关于网友提出的“ VC60源码中让外部DLL作为资源文件并调用”问题疑问,本网通过在网上对“ VC60源码中让外部DLL作为资源文件并调用”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: VC60源码中让外部DLL作为资源文件并调用
描述:

1.自己想写一个exe程序,需要使用一些外部的dll,但是客户下载的时候经常将DLL弄丢或者位置放错,所以想将DLL植入exe中,谢谢。不使用exe捆绑->杀毒软件原因。VC代码为非托管。


解决方案1:

有,但是很麻烦,不知道你元不愿意用。。
且看步骤:
1. 将外部dll作为资源文件添加到你的工程中去。我的例子中,dll名字叫testdll.dll。
 VC60源码中让外部DLL作为资源文件并调用
2. 将资源文件读入
3. 程序启动,将资源文件写入到一个临时文件。
4. 使用这个临时文件进行操作。


// testincludedll.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include 
#include 
#include "resource.h"
using namespace std;
// 重定义接口。
typedef int (*Add)(int,int);
int _tmain(int argc, _TCHAR* argv[])
{
// 读入dll资源文件
HMODULE hThis =  GetModuleHandle(NULL);  
HRSRC   hRes  =  FindResource(hThis, MAKEINTRESOURCE(IDR_DLL1), _T("dll"));
HGLOBAL hGres =  LoadResource(hThis, hRes); 
// 创建一个临时的dll文件。文件路径自定义。
HANDLE  hFile = CreateFile(_T("test.dll"), GENERIC_WRITE, NULL, NULL, CREATE_NEW, FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_ARCHIVE, NULL); 
// 将dll资源文件写入临时创建的dll文件中。
PVOID   pRes  =  LockResource(hGres);
DWORD  dwSize =  SizeofResource(NULL, hRes); 
DWORD dwSizeWritten = 0;  
    WriteFile(hFile, pRes, dwSize, &dwSizeWritten, NULL);  
    CloseHandle(hFile);  
// 再LOAD临时dll文件,执行操作。
//本例中,dll中接口是CTestDll::Add(int,int),你需要用dump指令,查看dll的导出接口,这里是("?Add@Ctestdll@@QAEHHH@Z"),然后获取这个乱码接口。
HMODULE hLib = LoadLibrary(_T("test.dll"));
Add add = (Add) GetProcAddress(hLib, "?Add@Ctestdll@@QAEHHH@Z"); 
// 调用方法。
int c = add(1, 2);
cout<<><>
cin>>c;
return 0;
}

看看输出效果:
 VC60源码中让外部DLL作为资源文件并调用
以上介绍了“ VC60源码中让外部DLL作为资源文件并调用”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3714167.html

相关图片

相关文章