精华内容
下载资源
问答
  • 动态链接库的全局变量问题 请问动态链接库被外部多次调用,每次调用中动态库...因为动态连接库是被映射到调用的那个进程的空间里的,而不同的进程有不同的地址空间,所以不同进程调用同一个DLL基本就没什么关系...

    动态链接库的全局变量问题

    请问动态链接库被外部多次调用时,每次调用中动态库自身的全局变量都会重新初始化吗?如果会那怎么来使我每次调用动态库时都能从上次的状态开始执行呢?

    你这个问题得分被调用的是同一个进程还是不同的进程。如果是不同的进程,那么你的动态连接库就完全是重新加载的。因为动态连接库是被映射到调用的那个进程的空间里的,而不同的进程有不同的地址空间,所以不同进程调用同一个DLL基本就没什么关系,除非你声明了一些变量在共享数据段,这样这些变量就会在不同的进程间共享。

    如果你同一个进程多次LoadLibrary,就不一定会重新初始化,事实上Windows是这样运作的。他为动态连接库创建一个变量用来记录被Load的次数,在一个进程中每次LoadLibrary这个引用计数就会加1,每次FreeLibrary这个引用记录就会减1,当计数变为0时,Windows则完全释放这个DLL,这时候你再一次加载,那么所有初始化的工作就会重新来一遍。如果你加载已经在程序其他地方加载过的DLL,那么就不会初始化。

    保存状态可以保存到文件,保存到注册表等。

    展开全文
  • 共享可能会被不同进程加载不同的位置上,如果共享中的指令使用了绝对地址、外部模块地址,那么在共享被加载就必须根据相关模块的加载位置对这地址做调整,也就是修改这些地址,让它在对应进程中能正确...

    fpic的目的是什么?
    共享库可能会被不同的进程加载到不同的位置上,如果共享库中的指令使用了绝对地址、外部模块地址,那么在共享库被加载时就必须根据相关模块的加载位置对这个地址做调整,也就是修改这些地址,让它在对应进程中能正确访问,而被修改到的段就不能实现多进程共享一份物理内存,它们在每个进程中都必须有一份物理内存的拷贝。fPIC指令就是为了让使用到同一个共享对象的多个进程能尽可能多的共享物理内存,它背后把那些涉及到绝对地址、外部模块地址访问的地方都抽离出来,保证代码段的内容可以多进程相同,实现共享。

    显式加载和隐式加载的说明以及区别和对照

    动态库file too short错误:必须要有dynamiclib参数,不能有-c参数,考虑动态库的签名问题,如果不考虑签名问题,可以在target中的headerruntime中勾选不验证库签名(disable library validation)

    c++14多线程支持lambda表达式,其中还有mutable的支持不然,多线程那个位置编译时会报语法错误 clang++表示开启使用标准c++库
    -fPIC 创建与地址无关的编译程序(pic,position independent code),是为了能够在多个应用程序间共享。

    //未加std::promise,使用c++11
    clang++ -std=c++11  -dynamiclib fake_dll.cpp -o fake.dylib
    
    加了std::promise,使用c++14
    clang++ -std=c++14   -dynamiclib   -fPIC fake_dll.cpp -o fake_dll.dylib
    
    查看库的符号导出表
    nm
    关于符号的类型,这里我们再多讨论一下。符号的类型是以一个字母的形式显示的,小写字母表示这个符号是本地(local)的,而大写字母则表示这个符号是全局的(global,externel)。一般来说,类型有一下几种:T、D、B、U、W。各自的含义如下:T表示在代码段中定义的一般变量符号;D表示时初始化过的数据段;B表示初始化的数据段;U表示没有定义的,在这个库里面使用了,但是在其他库中定义的符号;W,weak的缩写,表示如果其他函数库中也有对这个符号的定义,则其他符号的定义可以覆盖这个定义。
    

    在这里插入代码片`注意,生成的动态库必须得签名,否则会报
    not valid for use in process using Library Validation: mapped file has
    no cdhash, completely unsigned? Code has to be at least ad-hoc signed
    在使用库验证的进程中使用无效:映射文件没有cdhash,完全未签名?代码必须至少经过特别签名

    codesign -fs "Mac Developer: 2667895541@qq.com (RWR4YRD62V)" fake.dylib
    

    fake_dll.dylib 将动态库放到debug下 显式调用dlfcn.h头文件
    dlopen,dlerror,dlsym,dlclose

    动态库样例:

    //库.h文件:
    #ifdef WIN32
    #ifdef GENERAL_RESTFUL_SDK_EXPORTS
    #define AST_API __declspec(dllexport)
    #else
    #define AST_API __declspec(dllimport)
    #endif
    #else
    #define AST_API
    #endif  // WIN32
    
    
    typedef void (*OnProcessStart)(const char *);
    
    typedef void (*OnProcessCallback)(const char *);
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    /// Provide a general restful SDK for Cloud189, FamilyCloud, EnterpriseCloud and
    /// so on.
    
    /// The fields "process_info" (json string) must contain are belowed:
    /// "domain": "Cloud189", "FamilyCloud", "EnterpriseCloud"
    /// operation: "DoUpload", "UserCancelUpload", "DoDownload",
    /// "UserCancelDownload"
    /// uuid: if empty, it would be generated.
    
    /// on_start is a C funtion that would be called synchronously once when the
    /// process start.
    
    /// on_callback is a C funtion that would be called asynchronously per 1000
    /// milliseconds; and it would be called once when the process get completed.
    
    AST_API void AstProcess(const char *process_info, OnProcessStart on_start,
                            OnProcessCallback on_callback);
    /// Note: A general info block per progress would be create when the
    /// "AstProcess" called the first time automatically.
    
    /// Note: All json string shouldn't be keeped outside the callback while its
    /// memory would be recycled.
    
    /// Note: To avoid garble, the header file would not use chinese.
    #ifdef __cplusplus
    }
    #endif
    
    
    
    //库.cpp文件
    #define GENERAL_RESTFUL_SDK_EXPORTS
    #include <iostream>
    #include <thread>
    #include <unistd.h>
    #include <chrono>
    #include "fake_dll.h"
    
    
    void AstProcess(const char *process_info, OnProcessStart on_start,
                    OnProcessCallback on_callback)
    {
        process_info = "f7c6408b-a0df-c66e-4844-c41d8f235f11";
        on_start("f7c6408b-a0df-c66e-4844-c41d8f235f11");
    
    
        std::thread t([on_callback]()
        {
            std::this_thread::sleep_for(std::chrono::seconds(1));//1s睡眠
            on_callback(".callback1\n");
            
            std::this_thread::sleep_for(std::chrono::seconds(1));//1s睡眠
            on_callback("..callback2\n");
            
            std::this_thread::sleep_for(std::chrono::seconds(1));//1s睡眠
            on_callback("...callback finished\n");
            
        });
        
        t.detach();
    }
    
    }
    
    
    //
    //  main.cpp
    //  xianshi_load
    //
    //  Created by zhaozt@corp.21cn.com on 2020/1/2.
    //  Copyright © 2020 zhaozt@corp.21cn.com. All rights reserved.
    //
    
    //显式加载
    //显式链接
    //显式链接则是利用API函数实现加载和卸载共享库,获取带调用函数地址,获取错误信息等功能。(动态加载共享库)
    #include <iostream>
    #include <dlfcn.h> 显式加载需要用到的头文件
    #include <pthread.h>
    #include <unistd.h>
    #include <future>
    
    
    typedef void (*PStart)(const char *);
    
    typedef void (*PCallback)(const char *);
    
    typedef void (*AProcess)(const char *,PStart,PCallback);
    
    
    void  start(const char *start){
        printf("start\nthe uuid is %s\n",start);
    }
    void callback(const char *callback){
        printf("%s",callback);
    }
    
    void past(const char *,PStart,PCallback)
    {
        
    }
    
    int main(int argc, const char * argv[]) {
        
        
    //    需要引入头文件 dlfcn.h
    //第一个参数:字符串形式的共享库文件名
    //第二个参数:标志 RTLD_LAZY -懒加载 只适用于函数。只有在函数被执行的时候,才确定函数的地址。函数不执行,不加载。RTLD_NOW -立即加载 在dlopen返回之前,动态库的符号就已经确定了地址
    //返回值:通用类型指针, 成功返回句柄,暂时理解为首地址,失败返回NULL
    //函数功能:主要用于打开和加载共享库文件
        AProcess ast = &past;
        PStart pstart = &start;
        PCallback pcallback = &callback;
    
        void *handle = dlopen("/Users/zhaoztcorp.21cn.com/Desktop/fake_dll/fake/fake.dylib", RTLD_NOW);//加载共享库
        if (handle == NULL) {
            char *str = dlerror();
            if (str != NULL) {
                printf("出现问题:%s",str);
            }
            return -1;
        }
    
    //dlerror 函数功能:主要用于获取dlopen等函数调用过程发生的最近一个错误的详细信息,返回NULL则表示没有错误发生
    
    
    //    第一个参数:句柄,也就是dlopen函数的返回值
    //第二个参数:字符串形式的符号,表示函数名
    //返回值:成功返回函数在内存中的地址,失败返回NULL
    //函数功能: 主要用于根据句柄和函数名获取在内存中的地址
      *(void **) (&ast) = dlsym(handle, "AstProcess");//定位动态库中的函数
        if(ast == NULL) {
                char * str = dlerror();
    //     char *dlerror(void);   函数功能:主要用于获取dlopen等函数调用过程发生的最近一个错误的详细信息,返回NULL则表示没有错误发生
                if(str!=NULL) {
                    printf("出现问题:%s",str);
                }
                dlclose(handle);
                return -1;
            }
        
    
            ast("111",pstart,pcallback);
        
            sleep(5);
        
    //    函数功能: 主要用于关闭参数handle所指定的共享库,成功返回0,失败返回非0,当共享库不再被任何程序使用时,则回收共享库所占用的内存空间
            dlclose(handle);
            return 0;
    
    }
    
    
    
    隐式加载
    //#include <iostream>
    //#include "fake_dll.h"
    //
    //
    //#pragma comment (lib,"fake_dll.dylib") //链接动态库文件
    //void start(const char * start){
    //    printf("start!\n");
    //}
    //void end(const char * end){
    //    printf("end!\n");
    //}
    //int main(int argc, const char * argv[]) {
    //    printf("隐式加载\n");
    //    AstProcess("process", OnProcessStart(start), OnProcessCallback(end));
    //        return 0;
    //
    //
    //}
    
    展开全文
  • 动态链接库的全局变量问题 请问动态链接库被外部多次调用,每次调用中动态库自身的...因为动态连接库是被映射到调用的那个进程的空间里的,而不同的进程有不同的地址空间,所以不同进程调用同一个DLL基本就没什么...

    动态链接库的全局变量问题

    请问动态链接库被外部多次调用时,每次调用中动态库自身的全局变量都会重新初始化吗?如果会那怎么来使我每次调用动态库时都能从上次的状态开始执行呢?


    你这个问题得分被调用的是同一个进程还是不同的进程。如果是不同的进程,那么你的动态连接库就完全是重新加载的。因为动态连接库是被映射到调用的那个进程的空间里的,而不同的进程有不同的地址空间,所以不同进程调用同一个DLL基本就没什么关系,除非你声明了一些变量在共享数据段,这样这些变量就会在不同的进程间共享。

    如果你同一个进程多次LoadLibrary,就不一定会重新初始化,事实上Windows是这样运作的。他为动态连接库创建一个变量用来记录被Load的次数,在一个进程中每次LoadLibrary这个引用计数就会加1,每次FreeLibrary这个引用记录就会减1,当计数变为0时,Windows则完全释放这个DLL,这时候你再一次加载,那么所有初始化的工作就会重新来一遍。如果你加载已经在程序其他地方加载过的DLL,那么就不会初始化。

    保存状态可以保存到文件,保存到注册表等。
    提问者评价
    很详细,谢谢啦!也谢谢其他热心的朋友^_^

    转载于:https://www.cnblogs.com/kira2will/p/4128651.html

    展开全文
  • 1、不同进程加载同一个动态库时,不能共享的部分是 RW和ZI段 在ARM集成开发环境中: 1)只读的代码段和常量被称作RO段,是程序中的指令和常量; 2)可读写的全局变量和静态变量称为RW段,是程序中已初始化变量; 3...

    3.5 更新选自vivo校招C、C++题库

    1、不同进程加载同一个动态库时,不能共享的部分是 RW和ZI段

    在ARM集成开发环境中:
    1)只读的代码段和常量被称作RO段,是程序中的指令和常量;
    2)可读写的全局变量和静态变量称为RW段,是程序中已初始化变量;
    3)RW段中要被初始化为0的变量称为ZI段,是程序中未初始化变量。
    只有只读的指令和常量可以共享。

    2、同一个进程的不同线程,哪个是不能共享的?

    线程共享的进程环境包括:

    • 进程代码段
    • 进程的公有资源(如全局变量,利用这些共享的数据,线程很容易的实现相互之间的通信)
    • 进程打开的文件描述符
    • 消息队列
    • 信号的处理器
    • 进程的当前目录
    • 进程用户ID
    • 进程组ID

    线程独占资源:

    • 线程ID
    • 寄存器组的值
    • 用户栈、内核栈(在一个进程的线程共享堆区(heap))
    • 错误返回码
    • 线程的信号屏蔽码
    • 线程的优先级

    3、linux系统发送信号的系统调用是openkillsend、socket

    信号的处理包括信号的发送、捕捉和处理,它们有各自相对应的常见函数:
    ● 发送信号的函数: kill()、raise()。
    ● 捕捉信号的函数: alarm()、pause()。
    ● 处理信号的函数: signal()、sigaction()。

    4、在定点二进制运算器中,减法运算一般通过( 补码运算的二进制加法器 )来实现

    减法5-3相当于加法 5+(-3) 被加数5的二进制代码为 0000 0101

    加数-3的二进制代码为 1000 0011
    -3的二进制反码为 1111 1100
    -3的二进制补码为 1111 1101
    即 5-3 相当于5+(-3)=0000 0101+1111 1101=0000 0010=2 其中最高位为0表示正数
    最高数为1表示负数,正数的补码为其本身,负数的补码为取反加1
    由此可见 减法相当于补码运算的二进制加法器

    5、byte、short、char类型进行运算时会自动转化为int类型,int类型无法匹配byte型产生编译错误
    6、有关线程的哪些叙述是对的

    一旦一个线程被创建,它就立即开始运行。
    一个线程可能因为不同的原因停止并进入就绪状态。
    当一个线程因为抢先机制而停止运行,它被放在可运行队列的前面。
    使用start()方法可以使一个线程成为可运行的,但是它不一定立即开始运行。

    7、已定义以下函数:
    int fun(int *p){ return *p; }
    该函数的返回值是

    (注意区别第2个和第3个)
    1、不确定的值
    2、形参p中存放的值
    3、形参p所指存储单元中的值
    4、形参p的地址值

    8、p是一个指针,32位下为4字节,64位下为8字节
    9、循环队列循环队列图示
    10、已知代码char * p=(char * )malloc(val);其中p在运行的时候获得了一个空指针,请列举三种可能的原因?

    动态分配内存返回空指针,说明分配内存未成功,有三种可能:
    (1)分配的空间太小
    (2)分配的空间被当作内存碎片处理
    (3)val取值过大,即分配空间过大会导致内存溢出

    11、两个进程间需要交换1KB的数据,请列出三种进程间通讯的方法

    进程间通信又称IPC(Inter-Process Communication),指多个进程之间相互通信,交换信息的方法。根据进程通信时信息量大小的不同,可以将进程通信划分为两大类型:
    1、低级通信:控制信息的通信(主要用于进程之间的同步,互斥,终止和挂起等等控制信息的传递)
    2、高级通信:大批数据信息的通信(主要用于进程间数据块数据的交换和共享,常见的高级通信有管道,消息队列,共享内存等).
    (1)管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
    (2)有名管道 (named pipe): 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
    (3)信号量( semophore ): 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。不是用于交换大批数据,而用于多线程之间的同步.常作为一种锁机制,防止某进程在访问资源时其它进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
    (4)消息队列( message queue ): 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
    (5)信号 ( signal ): 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
    (6)共享内存 ( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
    (7)套接字( socket ): 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。

    12、Android四大组件是

    Android 开发的四大组件分别是:
    活动(activity),用于表现功能;
    服务(service),后台运行服务,不提供界面呈现;
    广播接受者(Broadcast Receive),勇于接收广播;
    内容提供者(ContentProvider),支持多个应用中存储和读取数据,相当于数据库。

    13、如何定义C++类,阻止C++类对象的相互赋值(obj2=obj1)?
    重载为私有函数阻止类对象赋值

    将拷贝构造函数重载等于号函数声明在类的Private声明域内且不实现任何代码,因为如果写出了调用拷贝构造函数或者赋值的语句,编译器会指出错误,因为外界不能调用类的私有方法。

    展开全文
  • 3)若有多个程序用到同一个动态链接,Windows在物理内存中只保留一份的代码,仅通过分页机制将这份代码映射到不同进程中;动态链接的扩展名一般是dll,但也可以是某些exe、各种控件(*.ocx)等。动态链接的...
  • 动态链接的重要原则就是不同进程共享同一个动态库的代码段,但不共享数据段。每个加载了动态库的进程都会提供一份自己的数据副本给动态库代码段使用。同时利用内存映射,将同一个动态库的代码段映射到不同的进程空间...
  • Windows系统进程详解

    2010-06-21 12:18:32
    )(附:Svchost.exe文件对那些从动态连接中运行的服务来说是一个普通的主机进程名。Svhost.exe文件定位在系统的 %systemroot%\system32文件夹下。在启动的时候,Svchost.exe检查注册表中的位置来构建需要加载的服务...
  • asp.net知识

    2015-06-18 08:45:45
    ADO.NET 2.0 大批量数据操作和多个动态的结果集 ADO.NET 2.0 异步处理 在ASP.NET中使用WINDOWS验证方式连接SQL SERVER数据库 改进ADO.Net数据库访问方式 ASP.NET 2.0 绑定高级技巧 简单实用的DataSet更新数据库的类+...
  • 如果一个控件的button只支持设置一个图标,这显然是不够灵活的,不实 用的。有人可能会说“把几张图片,切图做到一起不就可以了么,反正一个控件也可以理解只有一个背景。” 如果涉及 到色调调整,这种做法会...
  • COM学习记录

    2008-09-05 16:08:00
    进程内服务程序:服务程序被加载到客户的进程空间,在Windows环境下,通常服务程序的代码是以动态链接(dll)的形式存在。本地服务程序:服务程序与客户程序运行在同一台机器上,服务程序是一个独立的程序,通常它...
  • 正因为这样的设计,ET框架可以将所有的服务器组件都挂在一个服务器进程上,那么这个服务器进程就有了所有服务器的功能,一个进程就可以作为整组分布式服务器使用。这也类似电脑,台式机有所有的电脑组件,那它也完全...
  • cx_Freeze:将python程序转换为带有一个动态链接的可执行文件。 dh-virtualenv:构建并将 virtualenv 虚拟环境作为一个 Debian 包来发布。 Nuitka:将脚本、模块、包编译成可执行文件或扩展模块。 py2app:将 ...
  • java开源包1

    千次下载 热门讨论 2013-06-28 09:14:34
    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
  • java开源包12

    热门讨论 2013-06-28 10:14:45
    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
  • Java资源包01

    2016-08-31 09:16:25
    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
  • java开源包101

    2016-07-13 10:11:08
    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
  • java开源包11

    热门讨论 2013-06-28 10:10:38
    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
  • java开源包6

    热门讨论 2013-06-28 09:48:32
    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
  • java开源包10

    热门讨论 2013-06-28 10:06:40
    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
  • java开源包8

    热门讨论 2013-06-28 09:55:26
    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
  • java开源包9

    热门讨论 2013-06-28 09:58:55
    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
  • java开源包7

    热门讨论 2013-06-28 09:52:16
    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
  • Message-Driven Bean EJB实例源代码 2个目标文件 摘要:Java源码,初学实例,EJB实例 Message-Driven Bean EJB实例源代码,演示一个接收购物订单的消息驱动Bean,处理这个订单同时通过e-mail的形式 //给客户发一个感谢...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...
  • 1.1.8 NFS 和 SMB 是最常见的两种 NAS(Network Attached Storage)协议,当把一个文件系统同时通过 NFS 和 SMB 协议共享给多个主机访问,以下哪些说法是错误的 1.1.9 输入 ping IP 后敲回车,发包前会发生什么?...
  • vc++ 应用源码包_1

    热门讨论 2012-09-15 14:22:12
    压缩包内有两个源码包,一个是注册机源程序,另一个是解密机的源程序,一套完整的参考实例。 VC+MapX源码含GPS跟踪演示 VC3D 利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自...
  • vc++ 应用源码包_6

    热门讨论 2012-09-15 14:59:46
    压缩包内有两个源码包,一个是注册机源程序,另一个是解密机的源程序,一套完整的参考实例。 VC+MapX源码含GPS跟踪演示 VC3D 利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自...
  • vc++ 应用源码包_2

    热门讨论 2012-09-15 14:27:40
    压缩包内有两个源码包,一个是注册机源程序,另一个是解密机的源程序,一套完整的参考实例。 VC+MapX源码含GPS跟踪演示 VC3D 利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自...
  • vc++ 应用源码包_5

    热门讨论 2012-09-15 14:45:16
    压缩包内有两个源码包,一个是注册机源程序,另一个是解密机的源程序,一套完整的参考实例。 VC+MapX源码含GPS跟踪演示 VC3D 利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自...

空空如也

空空如也

1 2 3 4
收藏数 80
精华内容 32
关键字:

不同进程加载同一个动态库时