精华内容
下载资源
问答
  • 一、生成DLL文件 1、菜单项“文件”——>“新建”——>“工程”——>“Win32 Dynamic-Link Library”。创建一个工程项目,为这个工程取个名字为“test”。在这里我选择“创建一个简单的DLL”,此时在VC++...

    第一种方式、通过“extern "C"_declspec(dllexport)”方式导出

    1、菜单项“文件”——>“新建”——>“工程”——>“Win32 Dynamic-Link Library”。创建一个工程项目,为这个工程取个名字为“test”。在这里我选择“创建一个简单的DLL”,此时在VC++界面上会有一个树形文件结构。

    2、看到这个文件结构就大概明白,Source Files是放源码的,也就是以.cpp为后缀的文件;Header Files就是以放头文件,也就是以.h为后缀的文件。这个StdAfx.h和StdAfx.cpp都是自动生成的,这个StdAfx.h是一些默认的配置,这个不需要我们去动它。反正有了这个文件,我们只要在我们的源文件(如test.cpp)中引入这个头文件就行了。test.cpp的默认文件如下:

    #include "stdafx.h"
    BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  ul_reason_for_call, 
                           LPVOID lpReserved
                         )
    {
        return TRUE;
    }

    3、假设现在我要实现一个a+b的功能,并将这个功能打包成一个动态链接库(DLL),供其他的程序调用。代码如下:

    #include "stdafx.h"
    extern "C"_declspec(dllexport) int fun(int a,int b);
    BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  ul_reason_for_call, 
                           LPVOID lpReserved
                         )
    {
        return TRUE;
    }
    
    int fun(int a,int b) {
        return a+b;
    }

    extern "C"_declspec(dllexport) int fun(int a,int b)就是将这个方法导出,也就是把这个接口提供给其他程序。当然,如果还要定义其他的方法,都要用这个语句把这个接口暴露出来。

    4、此时,我们“build”工程,也就是组建一下。如果成功的话,就能在工程目录下的Debug目录下找到一个“test.dll”的文件。

    第二种方式、通过“def文件”方式导出

    1、重新建立一个“Win32 Dynamic-Link Library”工程,见方式一的1、2两步;

    2、假设现在我要实现一个a+b的功能,并将这个功能打包成一个动态链接库(DLL),供其他的程序调用。test.cpp中代码如下:

    #include "stdafx.h"
    
    BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  ul_reason_for_call, 
                           LPVOID lpReserved
                         )
    {
        return TRUE;
    }
    
    int fun(int a,int b) {
        return a+b;
    }

    3、工程Source Files文件右键——>“添加文件到文件夹”——>文件名“test.def”——>确定,文件内容如下:

    LIBRARY	Test
    EXPORTS
    	fun	@1

            LIBRARY 语句的后面是 DLL 的名称。链接器将此名称放到 DLL 的导入库中。 

            EXPORTS 语句列出名称,可能的话还会列出 DLL 导出函数的序号值。通过在函数名的后面加上 @ 符和一个数字,给函数分配序号值。当指定序号值时,序号值的范围必须是从 1 到 N,其中 N 是 DLL 导出函数的个数。

    4、此时,我们“build”工程,也就是组建一下。如果成功的话,就能在工程目录下的Debug目录下找到一个“test.dll”的文件。

    注意:若想在def文件中修改dll名称,则需下面配置一致。

            菜单项“Project”——>“Settings”——>“Link”——>“Output file name” 。

    展开全文
  • VC EXE图标提取程序,一个比较早的VC源码了,用于从Exe文件中提取出图标,内含一个IconSnap对话框类,可用于读取ICON,BMP,EXE,DLL,ICL等内部图标,并将其保存为ICO或BMP格式。代码作者:徐景周,程序使用还挺...
  • VC-LTL是基于MS VCRT的开源CRT库,可减少程序二进制大小并告别Microsoft运行时DLL,例如msvcr120.dll,api-ms-win-crt-time-l1-1-0.dll和其他依赖项。 VC-LTL最初是专用的Dism ++运行时,并于2017年3月6日从Dism +...
  • VC NETchar网络聊天 仿QQ 可发送文件 DLL源码,是上一个网络聊天程序的又一个版本,使用了DLL的版本,上一个版本可以这里下载:VC 6.0 NetChat 网络聊天源码  这个聊天程序中将常用的一些聊天模块封装在ChatSock....
  • Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码,文件操作,压缩包查看 Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码...
  • 文件目录钩子vc6工程,生成钩子hook.dll. 3。测试工程,c#(vs2008),引用zr.dll。编译成功后,先在c盘建一个包含”2cda4c3bhec7c32c“字段的文件夹和文件,如"c:\2cda4c3bhec7c32c.txt","c:\2cda4c3bhec7c32c"然后...
  • VC++打造MD5加密算法的源程序代码,程序经过编译可生成最终成品——DLL文件,方便你在其它地方调用。
  • 自动生成DLL影子VC2008代码,直接编译通过, 能截取DLL调用参数, 可同时生对应LIB文件,方便调用
  •  该项目是将fiddlerCoreAPI将其二次封装成VC++ DLL动态链接库文件,目前开发环境是使用visual studio 2019,该项目前身目的是封装为 易语言 模块使用,名字为奇易模块, 项目由2017年开始进行第一次封装,由于C#...
  • 程序启动时弹出文件打开对话框,基于MFC实现的VS2010源码,使用了微软类库mfc70.dll和msvcr70.dll两个文件,本站已将两个文件下载,放进压缩包内,你只需使用VS2010打开项目源码重新编译运行看效果。 运行环境:...
  • 一个适用于VC 的断点续传Dll源码,一个VC 支持多任务、多线程断点续传的DLL组件,并且用链表方式进行多任务管理。压缩包内含有DLL源文件以及演示...编译时要将编译好的DLL文件拷贝至Debug目录,运行后界面请参见截图。
  • 内容索引:VC/C++源码,系统相关,接口 本程序编译后生成DLL文件,因此就不截图了。自己做的一个关于接口的例子,主要是想实现在原有接口基础上继承新的接口,这样在保留原接口的基础上可以扩展新的功能。
  • 学习了某论坛的解密系列教程,使用Visual Studio 2010写的PEinfo(PE文件信息查看器),实现了启动软件的‘闪屏’功能,就是打开软件时先出一个图片,图片消失后再出程序界面,附全套源码,欢迎一起学习和研究。
  • VC CZip压缩文件和CUnzip解压算法实例程序,本程序编译后生成zipdll.dll,用户可使用这个DLL控件实现VC文件压缩和解压缩功能,zipdll.dll的源代码完整开源免费。
  • VC 实验代码,测试调用DLL动态库中的函数,本代码将学习动态链接库程序的编写。静态库与动态库的区别,以及调用程序在链接静态库和动态库时的区别。如何利用工具查看动态链接库输出的函数,Depends工具的使用,C ...
  • 一个集成了汉字简繁转换、文件加密等功能的VC 软件源码,这个软件包括了汉字的繁简转换、文件加密、DLL/OCX控件注册、定时关机,桌面宠物、文件分割、文件隐藏、光驱弹出等功能,一个小小的软件,集成了这么多小功能...
  • 下面一一介绍流程,虽然网上已经有了好多教程,但是我这一版是针对在java环境下运行C++/C文件时,需要生成dll库时具体的操作。 里面所有的代码全部换成了我的代码   首先是这位大神的讲解 ...

    加上了自己的理解,和下面两位大神的作品,我也不知道自己是原创还是转载。仅是将自己的新的写出来,大家一起学习


    鼓捣了一天半了,终于算是整明白了。

    下面一一介绍流程,虽然网上已经有了好多教程,但是我这一版是针对在java环境下运行C++/C文件时,需要生成dll库时具体的操作。

    里面所有的代码全部换成了我的代码

     

    首先是这位大神的讲解

    http://blog.sina.com.cn/s/blog_4a806bd9010007hn.html

     

    JAVA以其跨平台的特性深受人们喜爱,而又正由于它的跨平台的目的,使得它和本地机器的各种内部联系变得很少,约束了它的功能。解决JAVA对本地操作的一种方法就是JNI。

     JAVA通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式)。通过调用本地的库文件的内部方法,使JAVA可以实现和本地机器的紧密联系,调用系统级的各接口方法。

    简单介绍及应用如下:

    一、JAVA中所需要做的工作

          在JAVA程序中,首先需要在类中声明所调用的库名称,如下:

    static {

    System.loadLibrary(“Test”);

    }

    在这里,库的扩展名字可以不用写出来,究竟是DLL还是SO,由系统自己判断。

    还需要对将要调用的方法做本地声明,关键字为native。并且只需要声明,而不需要具体实现。如下:

    public native static void set(int i);

    public native static int get();

    然后编译该JAVA程序文件,生成CLASS,再用JAVAH命令,JNI就会生成C/C++的头文件。

    例如程序test.java,内容为:

    public class test

    {

        static

     {

      System.loadLibrary("Test");

     }

     public native static int get();

     public native static void set(int i);

     public static void main(String[]args)

     {


      test.set(10);

      System.out.println(test.get());

     }

    }

     用javac test.java编译它,会生成test.class。再用javah test,则会在当前目录下生成testdll.h文件,这个文件需要被C/C++程序调用来生成所需的库文件。

    由于是Android下的工程,因此.class文件已经自己自动生成了。如果是java文件需要到相应的路径下编译生成.class文件。

    进入该路径D:\androidprogram\Testdll\bin\classes,javah com.example.testdll.**,想编译哪个就写哪个类的名字,蓝色下划线的是包名,不要和路径名混淆。

    生成的头文件在D:\androidprogram\Testdll\bin\classes此路径下,

    名为:com_example_testdll_test.h

    二、C/C++中所需要做的工作

           对于已生成的.h头文件,C/C++所需要做的,就是把它的各个方法具体的实现。然后编译连接成库文件即可。再把库文件拷贝到JAVA程序的路径下面,就可以用JAVA调用C/C++所实现的功能了。

    接上例子。我们先看一下com_example_testdll_test.h文件的内容:



    /* DO NOT EDIT THIS FILE - it is machine generated*/

    #include <jni.h>

    /* Header for classcom_example_testdll_test */

     

    #ifndef _Included_com_example_testdll_test

    #define _Included_com_example_testdll_test

    #ifdef __cplusplus

    extern "C" {

    #endif

    /*

     * Class:    com_example_testdll_test

     * Method:   set

     * Signature: (I)V

     */

    JNIEXPORT void JNICALLJava_com_example_testdll_test_set

     (JNIEnv *, jclass, jint);

     

    /*

     * Class:    com_example_testdll_test

     * Method:   get

     * Signature: ()I

     */

    JNIEXPORT jint JNICALLJava_com_example_testdll_test_get

     (JNIEnv *, jclass);

     

    #ifdef __cplusplus

    }

    #endif

    #endif

    在具体实现的时候,我们只关心两个函数原型

    JNIEXPORT jint JNICALL Java_com_example_testdll_test_get(JNIEnv *, jclass);

    和JNIEXPORT void JNICALL Java_com_example_testdll_test_set(JNIEnv*, jclass, jint);

           这里JNIEXPORT和JNICALL都是JNI的关键字,表示此函数是要被JNI调用的。而jint是以JNI为中介使JAVA的int类型与本地的int沟通的一种类型,我们可以视而不见,就当做int使用。函数的名称是JAVA_再加上java程序的package路径再加函数名组成的。参数中,我们也只需要关心在JAVA程序中存在的参数,至于JNIEnv*和jclass我们一般没有必要去碰它。

    好,下面我们用Test.cpp文件具体实现这两个函数:

    #include"com_example_testdll_test.h"

     

    int i = 0;

    int j;

    JNIEXPORT jint JNICALLJava_com_example_testdll_test_get (JNIEnv *, jclass)

     

    {

     

     return i;

     

    }

    JNIEXPORT void JNICALLJava_com_example_testdll_test_set (JNIEnv *, jclass, jint)

     

    {

     

     i =j;

     

    }

    编译连接成库文件,本例是在WINDOWS下做的,生成的是DLL文件。并且名称要与JAVA中需要调用的一致,这里就是Test.dll

    把Test.dll拷贝到testdll.class的目录下,java testdll运行它,就可以观察到结果了。

     

    下面是针对红色画线的部分进行具体的讲解,来自于这个大神,但是该大神的还有与我的不同的地方,因此做了具体的修改,仅供大家参考

    http://wenda.haosou.com/q/1374540952062422

    用  vc  6.0  下的cl.exe  和  link.exe工具,请读下文:

    声明:下面这篇文章不是我写的,源自:一个叫,有容乃大  的博客 

    如何手工编写动态链接库(windows  dll)

     1.本例介绍在命令行(Console)环境下制作dll的方法

    2.读者动手前,请确保在windows中安装有编译、链接工具和必要的函数库文件。

     3.本例使用C语言实现.

     4.本例中使用路径均为我机器上的绝对路径,读者需根据实际情况调整。

    工具要求:

    Microsoft的编译器cl.exe 

    MIcrosoft链接器link.exe

    dll制作步骤:

    1.编写dll函数实现源代码Test.cpp(该cpp在上个大神的文章里已经写完了)

    2.编写dll函数输出定义文件Test.def.

     

    LIBRARY Test

    EXPORTS

    Java_com_example_testdll_test_get @1

    Java_com_example_testdll_test_set @2

     

    3.编译dll源码,生成dll,lib文件.

     

    3.1  新建命令行窗口

    3.2  设置PATH  ¦ INCLUDE  ¦  LIB  3个环境变量.

     

    SET Path= D:\VS2010setup\VC\bin;%Path%

    SET INCLUDE= D:\VS2010setup\VC\include;%INCLUDE%

    SET LIB= D:\VS2010setup\VC\lib;%LIB%

     

    //这里是为了防止出现cannot find kernel32.lib的错误

    在系统的环境变量中:要新建一个名称为LIB和INCLUDE的环境变量,以对应上文中的由紫色标记处的部分。

    LIBC:/Program Files/Microsoft SDKs/Windows/v6.0A/Lib;//不用更改

    C:/ProgramFiles/Microsoft SDKs/Windows/v5.0/Lib;//不用更改

    D:\VS2010setup\VC\lib//自己电脑上VClib库路径

    3.3  编译Test.cpp

     

    cd  D:\androidprogram\Testdll\jni  (hello.c和hello.def所在目录)

    cl /c  Test.cpp

    这里会出现不能找到jni.h文件,解决办法是

     

    将一下路径中的文件

    \jdk\include\jni.h    

    \jdk\include\win32\jawt_md.h   

    \jdk\include\win32\jni_md.h  
    复制到Visual Studio的安装目录下的\VC\include目录中

     

    3.4  链接Test.obj,生成Test.dll, Test.lib两个文件.

     

    link /def:Test.def  /dll  Test.obj

    这里就会出现两个错误,

    1 找不到kernel32.dll文件,解决办法已经给出

    2 extra operand “Test.obj”我出现这个错误的原因主要是在于点击这里没有弄好

     

    至此,我的库文件就弄好了。

     

    4.测试dll函数.

     

    4.1  编写测试代码  test.c

     

    extern int  say_hello(char*  name);

    int main(int  argc,char**  argv)

    {

    say_hello( "robbie ");

    return 0;

    }

     

    4.2  编译测试代码test.c

     

    cl /c  test.c

     

    4.3  链接test.obj和  hello.lib,生成可执行文件test.exe

     

    link test.obj  hello.lib

     

    4.4  运行test.exe,屏幕输出:

     

    hello robbie

     

    至此,一个dll构造完毕.

     

     

    下面是我自己的一点补充:

         如果要在c++下,或者win32    mfc下使用标准c写的dll,必须把上面的声明

    extern int  say_hello(char*  name);改成:extern  "C "  int say_hello(char*  name);

    展开全文
  • Dll文件VC生成,压缩包内附有VC程序。 部分代码释义: aHDC : 目标设备上下文 (.hdc picturebox 需要设 scalemode=pixels 和 autoredraw=true) Angle : 旋转角度值 (360 度 = 2*pi) X : 目标 X 坐标 Y : 目标 Y ...
  • VC 生成 awx AppWizard文件程序实例,.awx实际上就是一个通常我们使用的Windows动态链接库(DLL)文件
  • 内容索引:VC/C++源码,图形处理,曲线绘制 vc+实时曲线画图DLL控件及源程序,编译后生成clPlot.dll文件,另附有Demo,两文件需放置在同一目录一下,都可以顺利编译,使用这个Dll可帮助我们快速开发出一个适时曲线的...
  • 运行于VC 环境的MD5校验和计算小程序,代码文件说明:Md5.cpp : 定义控制台应用程序的入口点,Md5.h:计算字符串的MD5值(若不指定长度则由函数计算)。使用方法,在DOS窗口中输入需要MD5的任意字符即可,程序立即算出...
  • VC++如何生成日志

    2018-12-14 09:54:16
    利用vc++生成日志 1,使用简单方便.只有一个头文件logfile.h include后,直接调用函数即可 2,VC6,VC7(VS2008) 兼容VC版本 3,可输出文件名及行号 4,支持多线程应用
  • VC++6.0生成DLL

    2014-10-24 17:10:00
    一、生成DLL文件 1、菜单项“文件”——>“新建”——>“工程”——>“Win32 Dynamic-Link Library”。创建一个工程项目,为这个工程取个名字为“test”。在这里我选择“创建一个简单的DLL”,此时在VC++...

    一、生成DLL文件

    1、菜单项“文件”——>“新建”——>“工程”——>“Win32 Dynamic-Link Library”。创建一个工程项目,为这个工程取个名字为“test”。在这里我选择“创建一个简单的DLL”,此时在VC++界面上会有一个树形文件结构。

     

    2、看到这个文件结构就大概明白,Source Files是放源码的,也就是以.cpp为后缀的文件;Header Files就是以放头文件,也就是以.h为后缀的文件。这个StdAfx.h和StdAfx.cpp都是自动生成的,这个StdAfx.h是一些默认的配置,这个不需要我们去动它。反正有了这个文件,我们只要在我们的源文件(如test.cpp)中引入这个头文件就行了。

    test.cpp的默认文件如下:

    #include "stdafx.h"
    BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  ul_reason_for_call, 
                           LPVOID lpReserved
                         )
    {
        return TRUE;
    }

     

    3、假设现在我要实现一个a+b的功能,并将这个功能打包成一个动态链接库(DLL),供其他的程序调用。代码如下:

    #include "stdafx.h"
    extern "C"_declspec(dllexport) int fun(int a,int b);
    BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  ul_reason_for_call, 
                           LPVOID lpReserved
                         )
    {
        return TRUE;
    }
    
    int fun(int a,int b) {
        return a+b;
    }

    extern "C"_declspec(dllexport) int fun(int a,int b)就是将这个方法导出,也就是把这个接口提供给其他程序。当然,如果还要定义其他的方法,都要用这个语句把这个接口暴露出来。

    4、此时,我们“build”工程,也就是组建一下。如果成功的话,就能在工程目录下的Debug目录下找到一个“test.dll”的文件。

     

    二、调用DLL文件

    1、菜单项“文件”——>“工程”——>“Win32 Console Application”。创建一个Console应用,为这个应用取名为“calling”。此时再VC++的界面会出现一个属性文件结构。

     

    2、我们将上面生成的test.dll文件放到我们这个应用的calling目录下;然后在calling.app文件中填写如下代码:

     1 #include "stdafx.h"
     2 typedef int(*pfun)(int,int);
     3 
     4 int main(int argc, char* argv[])
     5 {
     6     HMODULE hModule=::LoadLibrary("test.dll");
     7     pfun newfun=(pfun)::GetProcAddress(hModule,"fun");
     8     int i=newfun(1,2);
     9     printf("the result is %d\n",i);
    10     ::FreeLibrary(hModule);
    11     return 0;
    12 }

     

    3、最后一步进行编译,运行,正常来说能通过,但是编译通不过,说“HMODULE”这样的关键字没有定义。打开标准配置头文件stdafx.h,内容默认如下:

    #if !defined(AFX_STDAFX_H__94A5270F_2E93_4D92_8279_BDF69332D688__INCLUDED_)
    #define AFX_STDAFX_H__94A5270F_2E93_4D92_8279_BDF69332D688__INCLUDED_
    
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    
    #define WIN32_LEAN_AND_MEAN        // Exclude rarely-used stuff from Windows headers
    
    #include <stdio.h>

    我们把这个文件添加如下:

    #if !defined(AFX_STDAFX_H__9CD74EA8_AC0B_4487_98D5_E8704B271E95__INCLUDED_)
    #define AFX_STDAFX_H__9CD74EA8_AC0B_4487_98D5_E8704B271E95__INCLUDED_
    
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    
    #if def_DEBUG
    #define WIN32_LEAN_AND_MEAN        // Exclude rarely-used stuff from Windows headers
    #endif
    
    #include <stdio.h>
    #include <Windows.h>

    这样就能编译通过,我们这个应用就能调用DLL文件中定义的方法了。

    转载于:https://www.cnblogs.com/feijishuo/p/4048774.html

    展开全文
  • DLL劫持源码-易语言

    2021-06-12 19:41:09
    由于输入表中只包含DLL名而没有它的路径名,因此加载程序必须在磁盘上搜索DLL文件。首先会尝试从当前程序所在的目录加载DLL,如果没找到,则在Windows系统目录中查找,最后是在环境变量中列出的各个目录下查找。利用...
  • VC 生成DLL控件,调用控件获取键盘的输入信息,程序由两部分构成,一个是Dll的源码,另一个是实例,实例要调用编译生成Dll文件,因此测试前要先编译LaunchDLL,然后把LaunchDLL.h和LaunchDLL.lib复制到KeyHook工程...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
    Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码,文件操作,压缩包查看  Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码...
  • 有谁知道用vc6开发的32位dll文件该怎么将它编译成64位的(有源码,cpp和hpp文件,没有dsp或者dsw,导入VS2005编译出错)
  • PE_Vc_源码

    2021-10-01 01:23:21
    分析PE可执行文件,并可查看任意EXE文件所使用的DLL文件及包函的涵数名或序数号,初学者程序打包时可以查看需要的DLL文件
  • 其实不然,本贴的技术可以大大提高程序的安全性和简约化,至少不用你自己写一个exe把dll去注入到目标程序。 本帖技术,在PC时代的时候,很流行。特别是病毒感染这块。 本帖技术 支持win10,win7, 包括64位的win7系,...

    目前很多EXE都是没有源代码的,如果要让这个EXE加载你写的DLL,除了LPK这种只能在旧系统里面运行的技术,还有一种方法就是给EXE加一个代码段,让exe启动的时候加载你写的DLL。那些不如写个exe直接修改目标程序的汇编内存,岂不是更方便,何必搞这个呢。其实不然,本贴的技术可以大大提高程序的安全性和简约化,至少不用你自己写一个exe把dll去注入到目标程序。

    本帖技术,在PC时代的时候,很流行。特别是病毒感染这块。

    本帖技术 支持win10,win7, 包括64位的win7系,和老系统XP,这个是PE加载技术,是一种类似补丁一样的感染技术,本代码含VC6写的HOOK类技术的模版代码,配合exe加载dll的这种加壳工具,让你的补丁写起来更加方便。

    https://download.csdn.net/download/i735740559/15548473

    展开全文
  • Gh0st源码学习(三)生成DLL和DAT文件

    千次阅读 2015-05-26 17:58:35
    生成的EXE文件中分离出DLL和DAT 文件 一、自定义DLL和DAT文件生成路径  先搜索 IDR_BSS 、 IDR_DLL  1、 IDR_DLL  位置:\Gh0st3.6原版\Server\install\install.cpp(418): ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,660
精华内容 4,264
关键字:

vc程序源码如何生成dll文件