精华内容
下载资源
问答
  • 自从会vb用调用动态库函数以来,我一直在想:如何动态的调用dll里的函数?网上有一个用CallWindowProc函数的方法,不过我还是喜欢自己有个办法.今天工夫不负有心人,我终于把我心中一直想的办法给实现了,干脆就往自己的...

    自从会vb用调用动态库函数以来,我一直在想:如何动态的调用dll里的函数?网上有一个用CallWindowProc函数的方法,不过我还是喜欢自己有个

    办法.今天工夫不负有心人,我终于把我心中一直想的办法给实现了,干脆就往自己的空间上贴吧.错误的地方,希望可以得到有这方面的师傅给以

    指正,以求进步!对于系统api我没有尝试,如果调用约定相符,应该适用于对系统api的调用.
    我自己用c写个dll,然后在vb里写了这个类.
    以下代码只是我简单的实现,主要的是看实现的道理.
    vc代码:
    ///
    '我把dll文件名命名为:dll
    #include <Windows.h>
    #include <stdlib.h>
    #include <string.h>
    #include "stdafx.h"

    BOOL APIENTRY DllMain( HANDLE hModule,
                           DWORD  ul_reason_for_call,
                           LPVOID lpReserved
                         )
    {
          return TRUE;
    }

    extern "C" BOOL _declspec(dllexport) add(int a)
    {
            MessageBoxA(NULL,"运行在dll里!","成功",MB_OK);
            a=999;
            return 1;
    }
    ///
    vb代码:
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '类代码:
    Private 状态标志 As Boolean
    Private 模块句柄 As Long
    Private 本地函数地址备份(0 To 4) As Byte
    Private 被替换函数的地址 As Long

    Public Function 替换函数地址(模块名 As String, 函数名 As String, 本地函数地址 As Long) As Boolean       
           
            If 0 = 本地函数地址 Then
                   替换函数地址 = 0
                   Exit Function
            End If       
            被替换函数的地址 = 替换函数地址
           
            Dim 函数地址 As Long
            Dim a As Long
            Dim 跳转指令(0 To 4) As Byte      
            '加载模块
            模块句柄 = LoadLibrary(模块名)
            If 0 <> 模块句柄 Then
                    '状态标志 = 1
            Else:
                    替换函数地址 = 0
                    Exit Function
            End If
           
            '检索函数地址
            函数地址 = GetProcAddress(ByVal 模块句柄, ByVal 函数名)
            If 0 <> 函数地址 Then
                    '状态标志 = 1
            Else
                    替换函数地址 = 0
                    Exit Function
            End If
           
            '计算跳转地址
            a = 函数地址 - (本地函数地址 + 5)
           
            '构造跳转地址
            跳转指令(0) = 233
            a = WriteProcessMemory(-1, ByVal VarPtr(跳转指令(1)), ByVal VarPtr(a), 4, 0)
            If 0 = a Then
                  替换函数地址 = 0
                  Exit Function
            End If
           
            '先备份本地函数入口指令
            a = WriteProcessMemory(-1, ByVal VarPtr(本地函数地址备份(0)), ByVal 本地函数地址, 5, 0)
            If 0 = a Then
                  替换函数地址 = 0
                  Exit Function
            End If
           
            '写入跳转指令
            a = WriteProcessMemory(-1, ByVal 本地函数地址, ByVal VarPtr(跳转指令(0)), 5, 0)
            If 0 = a Then
                  替换函数地址 = 0
                  Exit Function
            Else:
                  状态标志 = 1
                  替换函数地址 = 1
            End If
           
    End Function

    Public Function 还原函数地址() As Boolean

            If 0 = 状态标志 Then
                   还原函数地址 = 0
                   Exit Function
            End If
           
            Dim a As Long
            a = WriteProcessMemory(-1, ByVal 被替换函数的地址, ByVal VarPtr(本地函数地址备份(0)), 5, 0)
            If 0 = a Then
                  还原函数地址 = 0
                  Exit Function
            Else:
                  状态标志 = 0
                  还原函数地址 = 1
            End If
            FreeLibrary 模块句柄
           
    End Function

    Public Function 当前状态() As Boolean
            当前状态 = 状态标志
    End Function
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'vb普通模块代码:
    '读写内存的api函数
    Public Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal _
           lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long

    '加载模块的api函数
    Public Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long

    '检索模块里函数地址的api函数
    Public Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long

    '
    Public Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long

    '模拟一个函数与dll里,我们想调用函数类型和参数一致, 用类将函数的地址替换
    Public Function 测试函数(参数 As Long) As Boolean
           '我们随便给返回0,因为这个指令将不会被程序执行到
           测试函数 = 0
    End Function
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'vb窗口模块代码:
    Private Sub Form_Load()
            Dim 模块名 As String, 函数名 As String
            模块名 = App.Path + "/dll.dll"
            '模块名现在可以自己定了,自由了!
            函数名 = "add"
            Dim p As Boolean
            Dim aa As New Class1
            p = aa.替换函数地址(模块名, 函数名, AddressOf 测试函数)
            If p Then
                 测试函数 0
                 '将会弹出对话筐:运行在dll里!
                 aa.还原函数地址
            End If
    End Sub
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

     

     

     


     

    展开全文
  • VB动态加载DLL资源

    2019-04-18 20:04:16
    VB动态加载DLL资源
                   

    一、纯DLL资源的制作

               打开VC6.0 创建一个基于win32的动态链接库

     

    下一步中,要选择A sinmple Dll project

                 然后加载资源(注意对于超过256色的位图,VC不能编辑,不过这没关系)

        

        

    可以加载位图、图标、字符串等,这是加载后的情况

     

     

     资源添加完毕后,编译。(最好设为发布模式)

    这样,一个纯资源DLL就编译完毕了。

     二、VB动态调用资源DLL

               调用很简单,源码如下:

    '*************************************************************************
    '**                   叶帆源码     CSDN:yefanqiu
    '**-----------------------------------------------------------------------
    '**叶帆Blog:http://blog.csdn.net/yefanqiu
    '*************************************************************************
    Option Explicit

    Private Const IDS_STRING1     As Long = 1
    Private Const IDS_STRING2     As Long = 2
    Private Const IDS_STRING3     As Long = 3
    Private Const IDI_ICON1       As Long = 101
    Private Const IDB_BITMAP1     As Long = 102
    Private Const IDB_BITMAP2     As Long = 103

    Private Const DST_BITMAP = 4
    Private Const OBJ_BITMAP = 7

    '位图结构
    Private Type BITMAPINFOHEADER '40 bytes
            biSize As Long
            biWidth As Long
            biHeight As Long
            biPlanes As Integer
            biBitCount As Integer
            biCompression As Long
            biSizeImage As Long
            biXPelsPerMeter As Long
            biYPelsPerMeter As Long
            biClrUsed As Long
            biClrImportant As Long
    End Type
    Private Type RGBQUAD
            rgbBlue As Byte
            rgbGreen As Byte
            rgbRed As Byte
            rgbReserved As Byte
    End Type
    Private Type BITMAPINFO
            bmiHeader As BITMAPINFOHEADER
            bmiColors As RGBQUAD
    End Type

    Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
    Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
    Private Declare Function LoadString Lib "user32" Alias "LoadStringA" (ByVal hInstance As Long, ByVal wID As Long, ByVal lpBuffer As String, ByVal nBufferMax As Long) As Long
    Private Declare Function LoadBitmap Lib "user32" Alias "LoadBitmapA" (ByVal hInstance As Long, ByVal lpBitmapName As Long) As Long
    Private Declare Function LoadIcon Lib "user32" Alias "LoadIconA" (ByVal hInstance As Long, ByVal lpIconName As Long) As Long
    Private Declare Function GetObjectType Lib "gdi32" (ByVal hgdiobj As Long) As Long
    Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
    Private Declare Function DrawIcon Lib "user32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long, ByVal hIcon As Long) As Long
    Private Declare Function DrawState Lib "user32" Alias "DrawStateA" (ByVal hDC As Long, ByVal hBrush As Long, ByVal lpDrawStateProc As Long, ByVal lParam As Long, ByVal wParam As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal n3 As Long, ByVal n4 As Long, ByVal un As Long) As Long
    Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long

    '*************************************************************************
    '**函 数 名:LoadRes
    '**输    入:无
    '**输    出:无
    '**功能描述:资源加载
    '**全局变量:
    '**调用模块:
    '**作    者:叶帆
    '**日    期:2005-03-15 12:27:34
    '**修 改 人:
    '**日    期:
    '**版    本:V1.0.0
    '*************************************************************************
    Private Sub LoadRes()
        Dim hRes As Long
        Dim strData As String
        Dim hBmp As Long
        Dim hIcon As Long
        Dim bitBmp As BITMAPINFO
      
        '加载DLL
        hRes = LoadLibrary(Combo1.Text)
             
        '字符串
        strData = Space(255)
        LoadString hRes, IDS_STRING1, strData, 255
        Label1(0).Caption = Trim(strData)
       
        strData = Space(255)
        LoadString hRes, IDS_STRING2, strData, 255
        Label1(1).Caption = Trim(strData)

        strData = Space(255)
        LoadString hRes, IDS_STRING3, strData, 255
        Label1(2).Caption = Trim(strData)
          
        '位图
        hBmp = LoadBitmap(hRes, IDB_BITMAP1)
        If GetObjectType(hBmp) = OBJ_BITMAP Then
          GetObject hBmp, Len(bitBmp), bitBmp
          DrawState Picture1(0).hDC, 0, ByVal 0, hBmp, 0, 0, 0, bitBmp.bmiHeader.biWidth, bitBmp.bmiHeader.biHeight, DST_BITMAP
        End If
       
        '图标
        hIcon = LoadIcon(hRes, IDI_ICON1)
        DrawIcon Picture1(1).hDC, 0, 0, hIcon
       
        '释放资源
        DeleteObject hBmp
        DeleteObject hIcon
       
        '释放DLL
        FreeLibrary hRes
    End Sub

    '*************************************************************************
    '**函 数 名:Combo1_Click
    '**输    入:无
    '**输    出:无
    '**功能描述:更换DLL
    '**全局变量:
    '**调用模块:
    '**作    者:叶帆
    '**日    期:2005-03-15 12:28:49
    '**修 改 人:
    '**日    期:
    '**版    本:V1.0.0
    '*************************************************************************
    Private Sub Combo1_Click()
       LoadRes
    End Sub

    '*************************************************************************
    '**函 数 名:Form_Load
    '**输    入:无
    '**输    出:无
    '**功能描述:初始化
    '**全局变量:
    '**调用模块:
    '**作    者:叶帆
    '**日    期:2005-03-15 12:28:58
    '**修 改 人:
    '**日    期:
    '**版    本:V1.0.0
    '*************************************************************************
    Private Sub Form_Load()
        Combo1.ListIndex = 0
        LoadRes
    End Sub

    '*************************************************************************
    '**函 数 名:Picture1_Paint
    '**输    入:Index(Integer) -
    '**输    出:无
    '**功能描述:刷新
    '**全局变量:
    '**调用模块:
    '**作    者:叶帆
    '**日    期:2005-03-15 12:29:03
    '**修 改 人:
    '**日    期:
    '**版    本:V1.0.0
    '*************************************************************************
    Private Sub Picture1_Paint(Index As Integer)
        LoadRes
    End Sub

            运行后的界面:

      

      运行后的界面:

      

         源码下载地址:http://www.sky-walker.com.cn/yefan/sourcecode/dllres.rar

     

               
    展开全文
  • vb6之CoCreateInstanceEx加载Com对象中国第一个,其他下载的全是VC++等代码,外国网站不让访问,我们百度能搜到的全是旧信息,中国这样怎么发展?
  • 注意:下面的Dll文件必须是用托管代码写的,否则请使用API的相应函数进行动态加载。 一、 比如我事先写了一个类,如下: Public Class TestClass  Public Function Add(ByVal add1 As Integer, ByVal add2 ...

    注意:下面的Dll文件必须是用托管代码写的,否则请使用API的相应函数进行动态加载。

    一、

    比如我事先写了一个类,如下:

    Public Class TestClass

        Public Function Add(ByVal add1 As IntegerByVal add2 As IntegerAs Integer

            Return add1 + add2

        End Function

    End Class

    然后编译成了ClassDll.dll文件.

    二、

    在另一个程序中,我写入了如下代码

    Public Function Add(ByVal add1 As IntegerByVal add2 As IntegerAs Integer

            Dim asm As System.Reflection.Assembly = System.Reflection.Assembly.LoadFile("ClassDll.dll")

            Dim classtemp As Type = asm.GetType("ClassDll.TestClass") '区分大小写,wenjian ming bu neng xiangtong

            Dim obj As Object = asm.CreateInstance(classtemp.FullName)

            Dim me_Info As System.Reflection.MethodInfo = classtemp.GetMethod("Add")

            Dim paramter(1) As Object

            paramter(0) = add1

            paramter(1) = add2

            Return me_Info.Invoke(obj, paramter)

        End Function

    执行上面的Add函数其功能和执行一中的Add函数是一样的。


    当然,执行上面的函数的另一种方法是:(之前我用上面的方法反射执行一个exe文件里的函数时,总是失败,但是按照下面的方法就可以成功执行,你要是遇到问题时,不妨按照下面的方法试一试)

    Public Function Add(ByVal add1 As IntegerByVal add2 As IntegerAs Integer

            Dim asm As System.Reflection.Assembly = System.Reflection.Assembly.LoadFile("ClassDll.dll")

            Dim classtemp As Type = asm.GetType("ClassDll.TestClass")

            Dim obj As Object = asm.CreateInstance(classtemp.FullName)

            Return CallByName(obj, "Add", vbMethod,add1,add2)'这里特别注意CallByName的用法

        End Function

    1、上面的 System.Reflection.Assembly.LoadFile("ClassDll.dll")这一句里的ClassDll.dll是我们编译的那个dll文件。如果其不是放在程序目录下,这里必须换成ClassDll.dll的绝对路径。

    2、Dim classtemp As Type = asm.GetType("ClassDll.TestClass")这里的ClassDll.dll.TestClass类为什么不是我们定义的那个TestClass类呢(ClassDll.dll是我们的dll名称),你自己打开那个dll文件看一下就知道答案了。即我们用的时候类的前面必须加上我们的dll的名称再加一个点,才构成我们的类。

    3、paramter是我们函数要接收的参数。可以通过paramter来传递数据。

     

    经测试,在wince下同样适用


    同样,如何捕捉触发事件

    classtemp.GetType().AddEventHandler(obj, AddressOf obj_Timer)

    ...

    Sub obj_Timer()
        ' Here to deal with the timer event of your object's instance.
    End Sub

    (IDutyDao)Assembly.Load(m_path).CreateInstance(className);
    上述代码表示使用缺省无参数的构造函数创建一个对象实例,如果要在创建对象实例的时候调用有参数的构造函数该如何实现呢?

    考帮助文档使用重载的CreateInstance方法来创建对象实例的代码如下:

    (IDutyDao)Assembly.Load(m_path).CreateInstance(className, false, BindingFlags.Public,null,
    new object[] { dataSource }, null, null);
    

    结果不行,报错:

    System.MissingMethodException: System.MissingMethodException: 未找到类型

    “ToTop.CSIM.DAL.DaoSqlServerImpl.DutyDaoImpl”上的构造函数。

    经过多次尝试和网上搜索均未果,找到的都是一些提出遇到了同样问题却没有解决办法的帖子,最后静下心来详细查看该重载方法的帮助文档,

    发现第三个参数有文章,将代码调整如下:

    (IDutyDao)Assembly.Load(m_path).CreateInstance(className, false,
    BindingFlags.Public | BindingFlags.CreateInstance, null, new object[] { dataSource },null, null);

    结果还不行,报同样的错误,于是只保留BindingFlags.CreateInstance继续测试,将代码调整如下:

    (IDutyDao)Assembly.Load(m_path).CreateInstance(className, false,BindingFlags.CreateInstance,
    null, new object[] { dataSource }, null, null);
    
    

    上述代码测试通过!

    上述方法中的具体参数说明可参阅帮助文档。

     

    在使用.NET创建的程序或组件时,元数据(metadata)和代码(code)都存储于“自成一体”的单元中,这个单元称为装配件。我们可以在程序运行期间访问这些信息。
     
    在System.Reflection中有这样一个class————Assembly,我们可以通过它来加载一个装配件。方法如下:
    Assembly assm=Assembly.LoadFrom(fileName);
    其中filename是要加载的装配件的文件名称(带路径)。
    接下来,我们就可以通过使用System.Reflection内提供的Info classes来获取装配件中的信息了。首先让我们看一下这些Info classes:
    MethodInfo 获取某个“成员函数”的信息,并提供对此“成员函数”元数据的访问。
    ParameterInfo 获取某个“参数”的信息,并提供对此“参数”元数据的访问。
    Constructorinfo 获取某个“构造函数”的信息,并提供对此“构造函数”元数据的访问。
    PropertyInfo 获取某个“属性”的信息,并提供对此“属性”元数据的访问。
    FieldInfo 获取某个“数据成员”的信息,并提供对此“数据成员”元数据的访问。
    EventInfo 获取某个“事件”的信息,并提供对此“事件”元数据的访问。
    上面列出的这些classes(除ParameterInfo外)的访问操作,要通过一个Type对象来完成。比如我们要获得一个装配件的“成员函数”就要这样做:
    System.Reflection.Assembly ass=System.Reflection.Assembly.LoadFrom(fileName);
    Type[] tp=ass.GetTypes();
    System.Reflection.MethodInfo[] mi=tp[0].GetMethods();
    使用同样的方法我们还可以得到其它的信息,如下:
    获得“构造函数”信息:System.Reflection.ConstructorInfo[] ci=tp[0].GetConstructors();
    获得“属性”信息:System.Reflection.PropertyInfo[] pi=tp[0].GetProperties();
    获得“数据成员”信息:System.Reflection.FieldInfo[] fi=tp[0].GetFields();
    获得“事件”信息:System.Reflection.EventInfo[] ei=tp[0].GetEvents();
    此外,我们可以通过ParameterInfo类来获取“成员函数”和“构造函数”的参数信息,如下:
    获取“成员函数”的参数信息:System.Reflection.ParameterInfo[] pi=mi[0].GetParameters();
    获取“构造函数”的参数信息:System.Reflection.ParameterInfo[] pi=ci[0].GetParameters();
    ParameterInfo类有两个重要的属性:Name和ParameterType。通过它们我们可以得到“参数”的名称和数据类型。
    由于.NET将class的信息以“元数据”的形式封装在程序或是组件中,又提供了一系列可以获取“元数据”的方法,所以我们可以程序运行期间来动态的访问这些信息。

    以下摘自百度:http://zhidao.baidu.com/question/294391411.html
    个人肤浅理解,反射实际上就是得到程序集中的属性和方法.
    实现步骤:
    1,导入using System.Reflection;
    2,Assembly.Load("程序集")加载程序集,返回类型是一个Assembly
    3,   foreach (Type type in assembly.GetTypes())
                {
                    string t = type.Name;
                }
       得到程序集中所有类的名称
    4,Type type = assembly.GetType("程序集.类名");获取当前类的类型
    5,Activator.CreateInstance(type); 创建此类型实例
    6,MethodInfo mInfo = type.GetMethod("方法名");获取当前方法
    7,mInfo.Invoke(null,方法参数);

    展开全文
  • vb动态加载dll的,我加载的函数是int max(int *a,int b)参数怎么传递, a为数组,存放的整数,b为数组中整数的个数 周文星 (用户名:SupermanKing) 他好像以前写过这个文章,但是加载的函数是字符串文本。我...
  • 通过http://www.vbsqlite.com.ar/archive/file.php?id=28 ...上面的例子进行改进,测试通过了VB+Sqlite3.dll文件进行数据库基础操作和读写图片文件,非com控件,无需注册,采用unicode,省去了UTF8编码的麻烦!
  •  _________________下载原码:____________________________ -注意:全包括二部分,一定要下载完后...ReadDLL-VB.NET.part2.rar 1.3MB  ReadDLL-VB.NET.part1.rar 1.9MB  下载地址:http://kevery.ys168.co
    

    _________________下载原码:____________________________

    -注意:全包括二部分,一定要下载完后,直接解压,
    在解前不要修改压缩文件名,否不能正常解压!

    ReadDLL-VB.NET.part2.rar 1.3MB 
    ReadDLL-VB.NET.part1.rar 1.9MB 

    下载地址:http://kevery.ys168.com

    打开地址后,去到目录表,选择“kevery  kevery"目录,再选择“源码”,点击即可下载。

    ********************************************************


     本动画最佳显示效果分辨率:1280*1024像素


    *******************************************************

    关键代码:
    1:所须命名空间:Imports System.Reflection
    2:本例加载DLL文件对像:Dim TAA As System.Reflection.Assembly
    3:用于选择DLL文件代码
            OOF.InitialDirectory = Application.StartupPath
            OOF.Filter = "DLL文件(*.dll)|*.dll|所有文件(*.*)|*.*"
            OOF.ShowDialog()
            Dim filename As String
            If OOF.FileName.Trim() = "" Then
                Return
            End If
            filename = OOF.FileName.Trim()
            TextBox1.Text = filename
    4:操作动态载放DLL文件
     TAA = System.Reflection.Assembly.LoadFrom(TextBox1.Text)
            Dim t As Type = TAA.GetType("MDIC.MDICT")  '''MDIC.MDICT为,组件命名空间MDIC;而MDICT为入口类
            Dim obj As Object = t.InvokeMember(Nothing, BindingFlags.DeclaredOnly Or _
            BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or _
            BindingFlags.CreateInstance, Nothing, Nothing, Nothing)

            Dim TControl As Object

    '''GetMDICPan为MDICT类中的一个方法,返回值为组件

          TControl = t.InvokeMember("GetMDICPan", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or _
            BindingFlags.InvokeMethod, Nothing, obj, Nothing)

            Panel1.Controls.Add(TControl)''''将DLL中的控件添加到面板Panel1中.


    具体操作如下:
    1.建立组件工程(命名空间为MDIC),该工程主要为面板控件.并在工程中建立入口类MDICT,且在类中建立一个方法GetMDICPan(),并返回组件.
    MDIC.DLL

    编译并生成DLL-------------------------------------------结果:MDIC.DLL成功

     

    ---------------------- 完成 ---------------------

        全部重新生成: 1 已成功, 0 已失败, 0 已跳过

     

    2.建立读DLL工程:ABC
    ABC.exe

    编译并生成EXE--------------------------------------------结果:ABC.exe

    ---------------------- 完成 ---------------------

        全部重新生成: 1 已成功, 0 已失败, 0 已跳过

     


    3.其它操作,请看动画..............

     


    4.测试---------------------------------------------------结果:成功


    ..................................................................................事例完成!

     

    附加:
    好处是除了是可以动态添加DLL外,它还可以像引用一样,可以任意调用方法或属性,还可以定义一个对像.可以说相当于引用,区别只在于它是动态加载的.............................

            

    展开全文
  • 我想点击按钮b就加载外部B.dll,然后调用里面控件初始化方法进行初始化,添加到a中。 我点击按钮c就加载外部C.dll,同时清除控件B,然后调用里面控件初始化方法进行初始化,添加到a中。 请问如何实现呢?我在网上...
  • 在调试阶段总是找不到一些动态连接库,提示“错误 52 XX.dll 文件未找到 ”。 将dll放进system32或者把调试目录加入path都可以解决这个问题,但是,这不是我想要的。 最后,用尽浑身解数找到答案: 将dll们删除 ...
  • Test.dll中的类Plugin实现了IPlugin Form中调用时出错,但如果改为第二段代码则一切正常,而实际上 for 中 file变量的值和下面的pluginPath & "Test.dll"是一样的 你加载的不是同一个文件,那个出错的...
  • 加载CEF的动态库到我的Debug时 会自动载入下面很多的dll 我希望生成的时候,可以集中放到某一个资料夹(太多了,容易乱) 请问要怎么改这个路径呢? ![图片说明]...
  • 本文亮点:无需使用...静态加载所谓静态加载,是指你在编码时就知道DLL文件的位置,用户有义务保证运行时可以在那个固定的、不允许变更的位置找到DLL文件。这种情况可以使用简单的静态调用。静态调用十分简单,官...
  • 注意:下面的Dll文件必须是用托管代码写的,否则请使用API的相应函数进行动态加载。 一、 比如我事先写了一个类,如下: Public?Class?TestClass Public?Function?Add(ByVal?add1?As?Integer,?ByVal?add2?As?Integer)?...
  • 介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资源中释放出来,通过静态加载延迟实现DLL函数的动态加载,程序退出后实现临时文件的自动删除,从而为解决“DLL Hell”提供...
  • 用.net开发一个dll,传入vb.net代码或者c#源码就可以自动运行,创建窗口或者直接返回计算结果。 把这个dll给易语言vc6,vb6,freebasic,delphi等语言调用。让一切编程语言都支持.net 简单说,熟悉一种开发语言,但有时...
  • .net 中动态调用DLL总结

    千次阅读 2015-08-27 12:23:43
    注意:下面的Dll文件必须是用托管代码写的,否则请使用API的相应函数进行动态加载。 一、 比如我事先写了一个类,如下: Public Class TestClass  Public Function Add(ByVal add1 As Integer, ...
  • 介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资源中释放出来,通过静态加载延迟实现DLL函数的动态加载,程序退出后实现临时文件的自动删除,从而为解决“DLL Hell”提供...
  • C#开发的应用程序,如果需要动态加载ActiveX到窗体中,并且要调用指定的方法,网上查了一些,好多都是VB的,C#的偶尔有一些也是要动态加载DLL。    自己研究研究,结果稀里糊涂的弄出来了,话不多说,上代码先: ...
  • VB 创建MS OFFICE的 COM 加载

    千次阅读 2009-01-15 16:54:00
    究其实质,COM 加载项是一个动态链接库 (DLL),需要进行注册才能供 Microsoft® Office XP 应用程序加载和使用。虽然可以将加载项编写成可执行文件 (.exe),但 DLL 通常会比 .exe 文件提供更好的性能。此...
  • //加载dll 在B1消息函数中: void 你的类::OnB1() { initStillGraph=(InitStillGraph)GetProcAddress(glibsample,"InitStillGraph"); (*initStillGraph)(m_p1.m_hWnd);//预览图像 } 在B2消息函数中: void 你...

空空如也

空空如也

1 2 3 4 5
收藏数 85
精华内容 34
关键字:

vb动态加载dll