您现在的位置是:首页 >

动态链接库有什么用 创建了动态链接库DLL文件,那么有了这些文件还可以打开看到里面的源代码吗?

火烧 2022-02-06 23:07:07 1067
创建了动态链接库DLL文件,那么有了这些文件还可以打开看到里面的源代码吗? 创建了动态链接库DLL文件,那么有了这些文件还可以打开看到里面的源代码吗?DLL是编译好的代码,与一般程序没什么大差别,只是

创建了动态链接库DLL文件,那么有了这些文件还可以打开看到里面的源代码吗?  

创建了动态链接库DLL文件,那么有了这些文件还可以打开看到里面的源代码吗?

DLL是编译好的代码,与一般程序没什么大差别,只是它不能独立运行,需要程序调用。
另外: DLL中使用的资源东西, 别人可以在VS中打开并copy走. 如窗口图标-- 这些不属于源码.

动态链接库dll文件问题

第一步,我先从简单的调用出发,定义了一个简单的函数,该函数仅仅实现一个整数加法求和:
LIBEXPORT_API int mySum(int a,int b){ return a+b;}
C# 导入定义:
public class RefComm
{
[DllImport("LibEncrypt.dll",
EntryPoint=" mySum ",
CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]
public static extern int mySum (int a,int b);
}
在C#中调用测试:
int iSum = RefComm.mySum(,);
运行查看结果iSum为5,调用正确。第一步试验完成,说明在C#中能够调用自定义的动态链接库函数。
第二步,我定义了字符串操作的函数(简单起见,还是采用前面的函数名),返回结果为字符串:
LIBEXPORT_API char *mySum(char *a,char *b){sprintf(b,"%s",a); return a;}
C# 导入定义:
public class RefComm
{
[DllImport("LibEncrypt.dll",
EntryPoint=" mySum ",
CharSet=CharSet.Auto,
CallingConvention=CallingConvention.StdCall)]
public static extern string mySum (string a, string b);
}
在C#中调用测试:
string strDest="";
string strTmp= RefComm.mySum("45", strDest);
运行查看结果 strTmp 为"45",但是strDest为空。我修改动态链接库实现,返回结果为串b:
LIBEXPORT_API char *mySum(char *a,char *b){sprintf(b,"%s",a) return b;}
修改 C# 导入定义,将串b修改为ref方式:
public class RefComm
{
[DllImport("LibEncrypt.dll",
EntryPoint=" mySum ",
CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]
public static extern string mySum (string a, ref string b);
}
在C#中再调用测试:
string strDest="";
string strTmp= RefComm.mySum("45", ref strDest);
运行查看结果 strTmp 和 strDest 均不对,含不可见字符。再修改 C# 导入定义,将CharSet从Auto修改为Ansi:
public class RefComm
{
[DllImport("LibEncrypt.dll",
EntryPoint=" mySum ",
CharSet=CharSet.Ansi,CallingConvention=CallingConvention.StdCall)]
public static extern string mySum (string a, string b);
}
在C#中再调用测试:
string strDest="";
string strTmp= RefComm. mySum("45", ref strDest);
运行查看结果 strTmp 为"45",但是串 strDest 没有赋值。第二步实现函数返回串,但是在函数出口参数中没能进行输出。再次修改 C# 导入定义,将串b修改为引用(ref):
public class RefComm
{
[DllImport("LibEncrypt.dll",
EntryPoint=" mySum ",
CharSet=CharSet.Ansi,CallingConvention=CallingConvention.StdCall)]
public static extern string mySum (string a, ref string b);
}
运行时调用失败,不能继续执行。
第三步,修改动态链接库实现,将b修改为双重指针:
LIBEXPORT_API char *mySum(char *a,char **b){sprintf((*b),"%s",a); return *b;}
C#导入定义:
public class RefComm
{
[DllImport("LibEncrypt.dll",
EntryPoint=" mySum ",
CharSet=CharSet.Ansi,CallingConvention=CallingConvention.StdCall)]
public static extern string mySum (string a, ref string b);
}
在C#中调用测试:
string strDest="";
string strTmp= RefComm. mySum("45", ref strDest);
运行查看结果 strTmp 和 strDest 均为"45",调用正确。第三步实现了函数出口参数正确输出结果。
第四步,修改动态链接库实现,实现整数参数的输出:
LIBEXPORT_API int mySum(int a,int b,int *c){ *c=a+b; return *c;}
C#导入的定义:
public class RefComm
{
[DllImport("LibEncrypt.dll",
EntryPoint=" mySum ",
CharSet=CharSet.Ansi,CallingConvention=CallingConvention.StdCall)]
public static extern int mySum (int a, int b,ref int c);
}
在C#中调用测试:
int c=0;
int iSum= RefComm. mySum(,, ref c);
运行查看结果iSum 和c均为5,调用正确。
经过以上几个步骤的试验,基本掌握了如何定义动态库函数以及如何在 C# 定义导入,有此基础,很快我实现了变长加密函数在 C# 中的调用,至此目标实现。
三、结论
在 C# 中调用 C++ 编写的动态链接库函数,如果需要出口参数输出,则需要使用指针,对于字符串,则需要使用双重指针,对于 C# 的导入定义,则需要使用引用(ref)定义。
对于函数返回值,C# 导入定义和 C++ 动态库函数声明定义需要保持一致,否则会出现函数调用失败。定义导入时,一定注意 CharSet 和 CallingConvention 参数,否则导致调用失败或结果异常。运行时,动态链接库放在 C# 程序的目录下即可,我这里是一个 C# 的动态链接库,两个动态链接库就在同一个目录下运行。

动态链接库的.dll文件如何链接到程序哪里

DLL的全称是Dynamic Link Library, 中文叫做“动态链接文件”。
在Windows操作系统中, DLL对于程序执行是非常重要的, 因为程序在执行的时候, 必须链接到DLL文件, 才能够正确地运行。
而有些DLL文件可以被许多程序共用。因此, 程序设计人员可以利用DLL文件, 使程序不至于太过巨大。
但是当安装的程序越来越多, DLL文件也就会越来越多, 如果当删除程序的时候, 没有用的DLL文件没有被删除的话, 久而久之就造成系统的负担了。
DLL文件和EXE文件同样可以由编译语言生成,但是DLL没有程序启动入口,所以DLL文件不可执行。
-

动态链接库DLL文件里的代码有没有办法知道?

若没有源文件 要看DLL文件中的代码只能反汇编dll文件,不过这样得到的肯定是机器码(可转为汇编码)。

C代码文件如何生成Dll动态链接库

方法:
1、自己把相关的文件从在正常工作的安装目录中,打到这件文件,然后复制到出现问题软件的目录下。复制成功后,还要进行注册。
2、打开腾讯电脑管家,在工具箱里面有一个电脑诊所功能,可以进行修复文件缺失的问题。
3、实在不行就只有重装系统了

VB调用Fortran动态链接库,打包后,找不到.dll文件

应该是别的电脑没有安装Fortran的原因吧。
可以把程序发上来看看

动态链接库文件msqehell.dll

:down2.jz5u./dpin/0000000061213129218/1258949291/7f545a273faa5b8faab0299856a1e8/soft-2007-02/msqehell.dll.rar

c#类库生成动态链接库,dll文件如何查看

dumpbin查看一个exe引用了哪些动态库,或者我们想看某个动态库包含哪些接口函数。不知道你的类库中声明了那些内容,还有就是你想看到什么内容!正常情况都没问题
用VS里面有个对象浏览器可以查看类库中的接口、变量、方法,这个是图形化的很直观

MFC中调用外部动态链接库的内容,动态链接库dll文件放在哪儿。

你在问题补充里面说的非常正确你需要通过改变工作目录(workpath)来使得你的DLL能够正确的加载别人的DLL,我也遇到过这个问题根据你说的情况,你应该这样1用GetCurrentDir保存当前的工作目录2用SetCurrentDir将当前的工作目录,设置为你的DLL所在的路径,需要使用绝对路径3用LoadLibrary你的DLL4使用SetCurrentDir恢复到原来的工作路径

【动态链接库文件(DLL)丢失】

在Windows操作系统中还有一类文件也相当重要,这就是扩展名为DLL的动态链接库文件,这些文件从性质上来讲是属于共享类文件,也就是说,一个DLL文件可能会有多个软件在运行时需要调用它。如果我们在删除一个应用软件的时候,该软件的反安装程序会记录它曾经安装过的文件并准备将其逐一删去,这时候就容易出现被删掉的动态链接库文件同时还会被其它软件用到的情形,如果丢失的链接库文件是比较重要的核心链接文件的话,那么系统就会死机,甚至崩溃。我们可用工具软件如“超级兔仔”对无用的DLL文件进行删除,这样会避免误删除。9 U# _/ F2 u6 C0 T4 H2 i

动态链接库有什么用 创建了动态链接库DLL文件,那么有了这些文件还可以打开看到里面的源代码吗?
  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码