dll文件

关于水晶报表的版本问题!

一世执手 提交于 2020-03-19 13:56:51
最近的一个项目使用VS.NET2002 水晶报表使用9.2.33 在做报表的过程中一些倒还顺利,但是在部署时出现 很多问题,例如CRPE32.DLL,无法加载DLL,版本不对等问题,解决的办法除了从网络上找来的一些解决方法之外,还有自己的一点积累,原来的 VS.NET2002自带的报表是9.1.33在添加引用的时候一定要注意,不要出现版本错误,如果客户端是.NET FRAMEWORK1.1则你可以直接使用水晶报表9.2.33不需要在更改其他的什么DLL文件,注意DLL的版本是9.2.33即可。如果客户端使用 的.NET FRAMEWORK1.0如果你还是用9.2.33则会说版本不对,无法安装,这个时候你就要使用9.1.33了,并且需要拷贝9.2.33版本中的 crpe32.dll覆盖9.1.33中crpe32.dll文件,这样就不会再出现crpe32.dll unload的问题了(可以在C:\Program Files\Common Files\Crystal Decisions目录下检查版本号) 来源: https://www.cnblogs.com/wngwz/archive/2005/03/22/123554.html

dll的创建和使用

风流意气都作罢 提交于 2020-03-18 19:50:32
前几天有个朋友问道这个问题,结果因为以前从没搞过这个,对vs2005也不熟悉,竟花了2个小时才搞定, 。 特地拿来与大家分享,希望能给像我这样的菜鸟们一些帮助,O(∩_∩)O 【第一步】创建自己的dll 1.打开vs2005,选择菜单【File-New-Project】,在弹出对话框中选择[Visual C++]下的[Win32]-[Win32 Console Application],输入工程名后确认。 2.在弹出的对话框中选择[next],在Application Settiongs中选择Application type为Dll,Additional options选择Empty project,然后点Finish。 这时就创建了一个空的可以生成dll文件的工程。 3.在工程中添加一个头文件(这里为dll_test.h),在头文件中写入如下内容: 1 #ifndef _DLL_TUTORIAL_H 2 #define _DLL-TUTORIAL_H 3 4 #include<iostream> 5 6 #if defined DLL_EXPORT 7 #define DECLDIR _declspec(dllexport) 8 #else 9 #define DECLDIR _declspec(dllimport) 10 #endif 11 12 extern "C" 13 {

一个简单的DLL生成和测试

陌路散爱 提交于 2020-03-18 19:49:03
DLL文件内容: SKLDll.h #ifndef _SKLDLL_H_ #define _SKLDLL_H_ #ifndef DLL_API #define DLL_API extern "C" __declspec(dllexport) #else #define DLL_API extern "C" __declspec(dllimport) #endif DLL_API int add(int a,int b); #endif//_DLLMAIN_DLL_H_ SKLDll.cpp #include "SKLDll.h" #include<windows.h> BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: MessageBox(NULL,"DLL_PROCESS_ATTACH", "Information", MB_OK | MB_ICONINFORMATION); break; case DLL_THREAD_ATTACH: break; case DLL_PROCESS_DETACH: MessageBox(NULL, "DLL

dll中使用exe中的变量

◇◆丶佛笑我妖孽 提交于 2020-03-18 18:56:37
注意:输出目录为: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

DLL的Export和Import及extern \"C\"

南楼画角 提交于 2020-03-18 11:29:09
今天使用Unrar.dll,在调用RARProcessFileW时,VS总是提示“error LNK2001: 无法解析的外部符号”。 Unrar.dll中是使用 extern "C" 对外输出函数,测试发现,其他函数可以正常调用,只有RARProcessFileW有此错误。 最后检查发现在.def文件中没有导出这个文件。 EXPORTS RAROpenArchive RAROpenArchiveEx RARCloseArchive RARReadHeader RARReadHeaderEx RARProcessFile RARProcessFileW RARSetCallback RARSetChangeVolProc RARSetProcessDataProc RARSetPassword RARGetDllVersion DLL的export是指将DLL中的函数和数据输出到其它程式中,以供其使用。 DLL的import是指使用DLL的程式引入DLL中的函数和数据。 DLL的export DLL 中包含有一个表,称为export table(以下简称ET),其中包含了DLL中可以被外部程式使用的所有函数和数据的名字。只有记录在ET中的函数和数据才可以被外部程式所使用(如果 没有.DEF文件的话),其它所有没有记录在ET中的函数和数据都被视为是DLL私有的。因此

基于Delphi的融合DLL中的窗口

和自甴很熟 提交于 2020-03-18 04:36:15
        摘要:提出了一种简单的方法将DLL中的窗口融合(嵌入)到其他应用程序或DLL的窗口中,使用本方法可以简便地实现具有强扩展性和升级能力的软件系统。      1、引言   在开发一个大型通用控制系统时曾遇到这么一个问题:该系统软件包由若干个可执行文件和动态链接库组成,因为扩展性和兼容性的要求,需要将系统划分为若干个可执行文件和动态链接库,并且在大部分DLL中封装各自的操作界面,在调用DLL时将其中包含的部分界面嵌入地显示在主界面的某个区域或某个窗口内,与主界面的其他部分浑然一体。这样主程序与DLL在功能操作上各司其职,在外部界面上又彼此交融,使用户可以通过增加和修改DLL来实现对系统内部、外部的扩展和升级;同时因为DLL的跨语言特性,内部包含操作界面的DLL可以更为方便地在以后的不同工作、不同语言环境中更好地重复使用。   这一问题的应用较为广泛,但没有充分的资料来帮助解决,经过不断的试验,笔者将初步体会总结出来,用以抛砖引玉。本文中涉及的主程序和DLL都是在Delphi5.0下实现的,但因为其中所依赖的基础还是Windows本身的窗口机制,所以对于其他的语言平台也有实际意义。   在Delphi中如何创建DLL及输出DLL中的函数有较多资料进行过介绍,在本文中不再赘述,本文只针对DLL中的窗口部分做重点介绍。   2、DLL中自带窗口的创建和显示  

Unity Mono脚本 加密

混江龙づ霸主 提交于 2020-03-17 08:11:12
加密环境 引擎版本:Unity3D 5.3.4 及更高版本 ( 使用Mono而并非IL2CPP ) 操作系统:CentOS 6.2(Final) 加密环境:Android、IOS(暂定) 加密对象:C#源代码(dll文件) 解密方法:libmono.so (重点:加入解密算法并重编译此文件) 加密的目地 .NET Reflector等反编译工具 无法通过对dll反编译得到源码 注意事项 dll的加密算法和libmono.so解密算法一致 思路分析 重点:我们需要对libmono.so重编译,加入我们的解密算法。 准备环境 编译系统:linux或mac os 我的编译环境:centos 6.2 Final,建议在linux或mac os中编译 libmono.so linux安装运行库 git 在编译过程中,可能需要通过git获取某些运行库。 查看是否安装git: git –version CentOS7 yum 安装git https://git-scm.com/book/en/v2/Getting-Started-Installing-Git 其它package autoconf automake bison gcc gettext glib >= 2.0 libtool make perl glib >= 2.0 这个一直安装失败 centos安装软件 在root权限下

C++ dll的隐式与显式调用

跟風遠走 提交于 2020-03-17 03:55:32
  应用程序使用DLL可以采用两种方式:一种是隐式链接,另一种是显式链接。在使用DLL之前首先要知道DLL中函数的结构信息。Visual C++6.0(或者更先进的版本)在VC\bin目录下提供了一个名为Dumpbin.exe的小程序(使用方法见 VS自带工具:dumpbin的使用 ),用它可以查看DLL文件中的函数结构。另外,Windows系统将遵循下面的搜索顺序来定位DLL: 1.包含EXE文件的目录,2.进程的当前工作目录, 3.Windows系统目录, 4.Windows目录,5.列在Path环境变量中的一系列目录。   1.隐式链接   隐式链接就是在程序开始执行时就将DLL文件加载到应用程序当中。实现隐式链接很容易,只要将导入函数关键字_declspec(dllimport)函数名等写到应用程序相应的头文件中就可以了。下面的例子通过隐式链接调用MyDll.dll库中的Min函数。首先生成一个项目为TestDll,在DllTest.h、DllTest.cpp文件中分别输入如下代码: 1 //Dlltest.h 2 3 #include"MyDll.h" 4 #pragma comment(lib,"MyDll.lib") 5 extern "C"_declspec(dllimport) int Max(int a,int b); 6 extern "C"_declspec

动态链接库dll的 静态加载 与 动态加载

[亡魂溺海] 提交于 2020-03-17 03:52:44
动态链接是指在生成可执行文件时不将所有程序用到的函数链接到一个文件,因为有许多函数在操作系统带的dll文件中,当程序运行时直接从操作系统中找 。 而静态链接就是把所有用到的函数全部链接到exe文件中。 动态链接是只建立一个引用的接口,而真正的代码和数据存放在另外的可执行模块中,在运行时再装入; 而静态链接是把所有的代码和数据都复制到本模块中,运行时就不再需要库了。 静态链接方法:#pragma comment(lib, "test.lib") ,静态链接的时候, 载入代码就会把程序会用到的动态代码或动态代码的地址确定下来 静态库的链接可以使用静态链接,动态链接库也可以使用这种方法链接导入库 动态链接方法:LoadLibrary()/GetProcessAddress()和FreeLibrary() ,使用这种方式的程序并不在一开始就完成动态链接,而是直到真正调用动态库代码时,载入程序才计算(被调用的那部分)动态代码的 逻辑地址 ,然后等到某个时候,程序又需要调用另外某块动态代码时,载入程序又去计算这部分代码的逻辑地址,所以,这种方式使程序初始化时间较短,但运行期间的性能比不上静态链接的程序。 1. 生成 静态链接库 newdll) win32项目 -> dll 添加.h文件 betabinlib.h #ifndef BETABINLIB_H #define BETABINLIB_H

DLL的开发与调用(二)——创建导出类的Win32 DLL

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-17 03:50:50
创建导出类的Win32 DLL DLL的开发与调用(一)介绍了导出函数Win32DLL的创建过程,这也是最常用的DLL。同样,在DLL中定义的类也可以被应用程序的进程访问。下面仍以实现显示Hello,World!和求和为例介绍。 1、创建一个名为SayHello的Win32 DLL的空项目。 2、选择“插入|类”,在弹出的新建类窗口中为工程创建类CSayHello。在类的头文件SayHello.h中,使用关键字_declspec(dllexport)声明导出类,并定义相关的成员变量和成员函数。代码如下: // SayHello.h // class _declspec(dllexport) CSayHello { public: CSayHello(); virtual ~CSayHello(); void Say(char* szWords,int nLen); float Sum(); void SetNum(float fNum1,float fNum2); private: float fNo1; float fNo2; }; 在类的实现文件中实现各成员函数,代码如下: //SayHello.cpp // #include "SayHello.h" #include <string.h> CSayHello::CSayHello() { fNo1=fNo2=0.0; }