精华内容
下载资源
问答
  • Unity动态加载dll,并调用dll中的某个类的方法
    千次阅读
    2020-04-01 21:58:48
    //加载dll
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using System.Reflection;
    using System;
    
    public class Test: MonoBehaviour 
    {
    	void Start()
    	{
    		Assembly assembly = Assembly.LoadFrom(Application.streamingAssetsPath + "/HotUpdate.dll"); 
    		//获取某个类
    		Type type=assembly.GetType("HotUpdate");
    		//获取类中的某个方法
    		MethodInfo mi = type.GetMethod("GetName");
    		//执行方法获取返回值
    		string result = mi.Invoke(null,new object[]{}).ToString();
    	}
    }
    
    
    更多相关内容
  • QT 动态加载dll

    2021-01-06 04:39:00
    最近在调用卡尔的库函数时候,发现他们仅仅提供了一个dll,于是百度调研QT动态加载dll的方式,在调用成功后分析给大家。 动态调用。在使用的时候才会加载dll进来,使用QT本身自己的加载机制,利用QLibrary进行动态...
  • 本文实例讲述了C#实现动态加载dll的方法。分享给大家供大家参考。具体实现方法如下: 代码如下: using System; using System.Collections.Generic; using System.Text; using System.Reflection; using System.IO; ...
  • 下面小编就为大家带来一篇c# 动态加载dll文件,并实现调用其中的方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • C#动态加载DLL_C#_dll_

    2021-10-01 02:29:25
    使用 C# 动态加载DLL 播放声音源码。
  • C# WinForm动态加载DLL通过配置文件
  • 动态添加菜单动态加载dll源码系统结构:新窗口程序,取窗口特征,执行窗口程序,取菜单条句柄,取子菜单句柄,置窗口特征,取系统菜单,添加菜单项,取菜单项目ID,取当前进程,删除菜单项目
  • 主要介绍了C#动态加载dll扩展系统功能的方法,涉及C#动态加载dll扩展的相关技巧,需要的朋友可以参考下
  • 下面小编就为大家带来一篇c# 动态加载dll文件,并实现调用其中的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 动态加载DLL界面方法

    2017-11-27 10:46:30
    c#实现动态加载DLL界面方法,方便快捷,真正达到模块化设计
  • 易语言动态加载DLL库源码
  • c++ 动态加载DLL和静态加载DLL以及DLL的编写

    万次阅读 多人点赞 2019-04-04 17:26:23
    1、DLL的编写 新建win32控制台或者win32项目,然后选择DLL 下面是自动生成的文件MyDll.h // 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 MYDLL_...

    1、DLL的编写

    新建win32控制台或者win32项目,然后选择DLL

    下面是自动生成的文件MyDll.h

    // 下列 ifdef 块是创建使从 DLL 导出更简单的
    // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 MYDLL_EXPORTS
    // 符号编译的。在使用此 DLL 的
    // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
    // MYDLL_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
    // 符号视为是被导出的。
    #ifdef MYDLL_EXPORTS
    #define MYDLL_API __declspec(dllexport)
    #else
    #define MYDLL_API __declspec(dllimport)
    #endif
    
    // 此类是从 MyDll.dll 导出的
    class MYDLL_API CMyDll {
    public:
    	CMyDll(void);
    	// TODO:  在此添加您的方法。
    public:
    	int MyPrint();
    };
    
    extern MYDLL_API int nMyDll;
    
    MYDLL_API int fnMyDll(void);
    

    MyDll.cpp

    // MyDll.cpp : 定义 DLL 应用程序的导出函数。
    //
    
    #include "stdafx.h"
    #include "MyDll.h"
    #include <stdio.h>
    
    // 这是导出变量的一个示例
    MYDLL_API int nMyDll=0;
    
    // 这是导出函数的一个示例。
    MYDLL_API int fnMyDll(void)
    {
        return 42;
    }
    
    // 这是已导出类的构造函数。
    // 有关类定义的信息,请参阅 MyDll.h
    CMyDll::CMyDll()
    {
        return;
    }
    
    int CMyDll::MyPrint()
    {
    	printf("我是DLL中的函数");
    	return 100;
    }
    

    这其中的MyPrint函数是我自己添加的。

    然后编译。

    2、静态加载DLL

            静态加载需要.h和.lib以及.dll文件。

    接来下调用静态加载:

    新建一个项目,然后把这三个文件拷贝进来

     

    当然静态调用DLL,很简单。而且还算方便。但是当你知道动态调用DLL的时候,你就会发现动态调用DLL更灵活,强大。

    3、动态加载DLL

            就是说,你不需要.h和.lib文件,只需要.dll文件,同时知道你所要使用的函数的参数类型以及返回值类型。

    我还是拿刚刚那个DLL为例。不过要稍微改变一下。

    这个时候我在原来的MyDll项目中改变了如下文件

    MyDll.def

    LIBRARY    "MyDll"
    EXPORTS
        getInstance

    MyDll.h

    // 下列 ifdef 块是创建使从 DLL 导出更简单的
    // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 MYDLL_EXPORTS
    // 符号编译的。在使用此 DLL 的
    // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
    // MYDLL_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
    // 符号视为是被导出的。
    #ifdef MYDLL_EXPORTS
    #define MYDLL_API __declspec(dllexport)
    #else
    #define MYDLL_API __declspec(dllimport)
    #endif
    
    
    class CDLL
    {
    public:
    	virtual int MyPrint() = 0;
    
    };
    
    
    // 此类是从 MyDll.dll 导出的
    class  CMyDll :public CDLL {
    public:
    	CMyDll(void);
    	// TODO:  在此添加您的方法。
    public:
    	int MyPrint();
    };
    
    CDLL * getInstance();
    
    

    MyDll.cpp

    // MyDll.cpp : 定义 DLL 应用程序的导出函数。
    //
    
    #include "stdafx.h"
    #include "MyDll.h"
    #include <stdio.h>
    
    
    // 这是已导出类的构造函数。
    // 有关类定义的信息,请参阅 MyDll.h
    CMyDll::CMyDll()
    {
        return;
    }
    
    int CMyDll::MyPrint()
    {
    	printf("我是DLL中的函数");
    	return 100;
    }
    
    CDLL * getInstance()
    {
    	return new CMyDll();
    }

    我新建了一个虚基类,然后让MyDll继承,这样我就能使用多态,然后类的实例,然后操作了。

    再新建一个调用动态DLL的项目,然后把这个MyDll.dll拷贝过来

    源.cpp

    #include <iostream>
    #include <windows.h>
    using namespace std;
    
    class CDLL
    {
    public:
    	virtual int MyPrint() = 0;
    
    };
    
    
    int main()
    {
    	HINSTANCE hDll;//句柄
    
    	typedef CDLL*(*MyGetInstance)();
    	MyGetInstance instance;//函数指针
    	hDll = ::LoadLibrary(L"MyDll.dll");//动态加载DLL模块句柄
    	if (hDll)
    	{
    		instance = (MyGetInstance)GetProcAddress(hDll, "getInstance");//得到所加载DLL模块中函数的地址
    		
    		CDLL *dll = instance();
    		int ret = dll->MyPrint();
    		cout << "ret=" << ret << endl;
    		FreeLibrary(hDll);//释放已经加载的DLL模块
    	}
    
    	system("pause");
    	return 0;
    }

    输出结果如下

    最后,我再把整个源代码放出来,你们下载可以研究一下。我最讨厌放源代码还放在CSDN上面。让那些没有积分的人很难受,所以我的任何东西需要下载的都不放CSDN上,百度云链接:

    链接:https://pan.baidu.com/s/1O9uNwZ5WcTDFiojkYTdMQA 
    提取码:yu23 

     

    欢迎关注我们的公众号,本人知识能力有限,如果文章中有错误的地方欢迎向我反馈或者留言,十分感谢!

    展开全文
  • 易语言dll函数动态调用源码易语言动态调用dll源码 系统结构:内部接口_查看插件,内部接口_加载插件,载入动态链接库_,呼叫窗口函数地址_,取进程地址_,FreeLibrary,外部接口_统一调用接口
  • C# 反射实例代码 接口方式动态加载dllReflectionC# 反射实例代码 接口方式动态加载dllReflection
  • 主要介绍了JavaWeb项目中dll文件动态加载方法,步骤详细,在这里分享给大家,需要的朋友可以了解下。
  • C# WinForm 动态加载DLL 通过配置文件

    热门讨论 2012-05-09 11:20:37
    C# WinForm 动态加载DLL 通过配置文件
  • 利用反射动态加载dll

    2017-11-03 11:32:08
    C#,利用反射动态加载dlldll需要在sql server数据库里面进行维护,加载的时候先去读取数据库里面的信息,查到dll的名称。并根据名称去程序里面直接去抓取,并显示在界面上
  • 动态加载dll

    2015-01-26 09:30:01
    动态加载dll
  • vb6之CoCreateInstanceEx加载Com对象中国第一个,其他下载的全是VC++等代码,外国网站不让访问,我们百度能搜到的全是旧信息,中国这样怎么发展?
  • /*主要说明如何通过反射实现动态加载DLL, * 因为.Net底层有自动回收机制,所以不需要考虑这个问题 * ADD by Brian 2008/01/21 参考MSDN */
  • VC静态加载DLL动态加载DLL

    千次阅读 2018-08-27 06:20:13
    VC静态加载DLL动态加载DLL 1. 静态加载DLL 如果你有a.dll和a.lib,两个文件都有的话可以用静态加载的方式: message函数的声明你应该知道吧,把它的声明和下面的语句写到一个头文件中 #pragma comment(lib, &...

    VC静态加载DLL和动态加载DLL

    1. 静态加载DLL

    如果你有a.dlla.lib,两个文件都有的话可以用静态加载的方式:

    message函数的声明你应该知道吧,把它的声明和下面的语句写到一个头文件中

    #pragma comment(lib, "a.lib")

    然后你的对话框.cpp中包含这个头文件就可以使用message函数了。

    2. 动态加载DLL

    如果dll没有对应的.lib文件,那么就只能使用动态加载的方式了。

    动态调用动态库步骤:

    1. 创建一个函数指针,其指针数据类型要与调用的DLL引出函数相吻合。
    2. 通过Win32 API函数LoadLibrary()显式的调用DLL,此函数返回DLL的实例句柄。
    3. 通过Win32 API函数GetProcAddress()获取要调用的DLL的函数地址,把结果赋给自定义函数的指针类型。
    4. 使用函数指针来调用DLL函数。
    5. 最后调用完成后,通过Win32 API函数FreeLibrary()释放DLL函数。

    例如:

    假设函数的声明为:void message(int a);

    //函数指针声明

    typedef void (WINAPI MESSAGE)(int a);

    MESSAGE *pMessage = 0;

     

    //加载a.dll

    HINSTANCE hDLLDrv = LoadLibrary("a.dll");

     

    //获取message函数的指针

    if(hDLLDrv)

    {

    pMessage = (MESSAGE *)GetProcAddress(hDLLDrv, "message");

    }

    然后就可以这样调用函数了:

    pMessage(1);

    展开全文
  • QT中加载DLL的方式有两种: 一种是静态方式的加载,需要有两个文件:lib...在使用的时候才会加载dll进来,使用QT本身自己的加载机制,利用QLibrary进行动态加载。 静态加载的方式比较常用,下面介绍一下动态加载的...

    QT中加载DLL的方式有两种:

    一种是静态方式的加载,需要有两个文件:lib文件和dll文件。lib文件就是导入库,里面定义了一些函数符号,在调用的时候会直接查找这些函数符号,然后根据这些函数符号,找到DLL对应的模块加载进来进行调用。

    另一种就是动态调用。在使用的时候才会加载dll进来,使用QT本身自己的加载机制,利用QLibrary进行动态加载。

    静态加载的方式比较常用,下面介绍一下动态加载的方式:

    1.首先创建一个dll项目,一定要选择Qt Class Library:

    在这里插入图片描述

    2.编写DLL程序

    #pragma once
    
    #include "mainfunc_global.h"
    #include <string>
    
    class MAINFUNC_EXPORT MainFunc {
    public:
    	MainFunc();
    
    	virtual int add(int a,int b);
    	virtual void printMsg(QString msg);
    };
    
    extern "C" {//一定要添加上
    	MAINFUNC_EXPORT MainFunc* getDllObj();
    
    	MAINFUNC_EXPORT char* text();
    
    	MAINFUNC_EXPORT int printInt();
    }
    
    

    在需要导出的函数上一定要添加上extern “C”,编译器在生成DLL的时候,就会自动的按照C语言的编译方式进行编译,只会编译出函数名,而不会编译上参数类型。

    #include "MainFunc.h"
    #include <QMessageBox>
    
    MainFunc::MainFunc() {
    }
    
    int MainFunc::add(int a, int b) {
    	return a + b;
    }
    
    void MainFunc::printMsg(QString msg) {
    	QMessageBox* msgBox = new QMessageBox;
    	msgBox->setText(msg);
    	msgBox->setWindowTitle(QStringLiteral("信息框"));
    	msgBox->show();
    }
    
    MAINFUNC_EXPORT MainFunc* getDllObj() {
    	return new MainFunc;
    }
    
    MAINFUNC_EXPORT char* text() {
    	return "Hello World 2019!";
    }
    
    MAINFUNC_EXPORT int printInt() {
    	return 2019;
    }
    
    

    编译一下就可以生成DLL和相应的LIB文件。

    3.动态调用

    声明函数指针:

    #include <QMessageBox>
    #include "../MainFunc/MainFunc.h"
    #include <QLibrary>
    #include <QDebug>
    
    typedef MainFunc* (*getObj)();
    typedef char* (*dllText)();
    typedef int (*dllPrintInt)();
    

    具体调用过程:

    void QtVS2015::slotTest() {
    	QLibrary* mainFunDll = new QLibrary("MainFunc.dll");
    	if (mainFunDll->load()) {
    		getObj obj = (getObj)mainFunDll->resolve("getDllObj");
    		MainFunc* mF = obj();
    		mF->printMsg(QStringLiteral("这是一个DLL调用程序"));
    		qDebug()<<mF->add(4, 7);
    
    		dllText dText = (dllText)mainFunDll->resolve("text");
    		qDebug() << QString::fromLocal8Bit(dText());
    
    		dllPrintInt dPrintInt = (dllPrintInt)mainFunDll->resolve("printInt");
    		qDebug() << dPrintInt();
    
    	} else {
    		QMessageBox* msgBox = new QMessageBox;
    		msgBox->setText(QStringLiteral("动态库加载失败!"));
    		msgBox->setWindowTitle(QStringLiteral("信息框"));
    		msgBox->show();
    	}
    }
    

    运行一下就可以了!

    aaa

    展开全文
  • 摘要:C#源码,控件类库,动态加载DLL LoadDLLTest-C# WinForm 动态加载DLL 通过配置文件,测试之前请先在VS里编译生成所有项目文件,包括DLL文件,源代码完整,实际上是通过窗体可视化界面来演示如何动态加载DLL库...
  • 动态加载DLL菜单

    2014-09-05 14:56:41
    包含两个vc6工程,一个是嵌入了菜单的DLL,另一个是测试调用的exe
  • 介绍了c#动态加载卸载DLL的方法,有需要的朋友可以参考一下
  • 动态加载DLL信息,获取DLL属性和方法,并发集合的测试
  • c# 实现动态加载c++ dll 动态库 本示例提供动态加载 卸载c++ dll动态库 所用工具 : visual studio ; 系统:Windows

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 407,217
精华内容 162,886
关键字:

动态加载dll

友情链接: 128页.rar