C#中使用DLL相关问题
一,C#调用 C/C++ 库函数
1,UNITY的C# VS工程常常打不开 属性页,右键工程无 【添加引用】项。原因是VS的自带工具【适用于UNITY的工具】导致的。
解决办法:VS-【工具】-【选项】-【适用于UNITY的工具】-【杂项】-【访问项目属性】改为true,然后重启VS, 就可以打开项目属性了
2,C#工程的属性页与C++相差很大,它没有文件目录的设置项,没有LIB文件的添加和目录项,因此,C#工程使用库文件只有一种方式:添加引用,
且C#只能引用DLL,不能引用LIB
3,添加引用时,C#工程一定要添加引用才能使用DLL,就算你的DLL在工程中任何位置不添加引用也不能用,这很明显,就像C++工程中不添加LIB及其目录则不能用一样
添加引用只是告诉IDE该到哪里去取这个DLL,
4,在代码中声明导出函数【注意导出函数必须是 static extern的】
[System.Runtime.InteropServices.DllImport("KERNEL32.DLL", EntryPoint="RtlZeroMemory")]
public unsafe static extern bool ZeroMemory(byte* destination, int length);
关于静态链接库和动态链接库:
静态链接库只有一个.LIB文件,使用时 : 工程中添加.lib并指定lib目录,代码中包含.h或只接声明lib中的函数名然后使用
动态链接库可以只生成一个dll而不生成lib,这样使用时只能使用 系统函数loadlibary()来加载这个dll,并从中导出想要使用的函数。
动态链接库常用的使用方式是生成一个lib和一个dll,使用时 : 工程中添加.lib并指定lib目录,代码中包含.h或只接声明lib中的函数名然后使用
二,C#调用 C# 库
C#的库只有动态链接库DLL,且调用极为简单,只需要添加引用,然后在程序中像使用一个源码类那样使用它,不需要 DllImport标签来导入函数,示例如下:
//DLL,创建一个库工程,添加如下代码,编译生成了ClassLibaray1.DLL
namespace ClassLibrary1
{
public class Class1
{
public void Print(string s)
{
Console.WriteLine(">> {0}", s);
}
}
}
//工程中添加引用,将ClassLibaray1.dll添加到工程中
//使用ClassLibaray1.DLL
using ClassLibrary1; namespace uselib
{
public class myclass
{ static void Main()
{
var osp = new sp1class();
osp.Print("");
Class1 oc1 = new Class1();
oc1.Print("ddd"); }
}
}
另外参考:
1,将CS脚本打成DLL并在UNITY中使用
https://blog.csdn.net/qq_25210959/article/details/53285403
2,将UNITY 的DLL打进自己的DLL中?
https://blog.csdn.net/suifcd/article/details/48248015
C#中使用DLL相关问题的更多相关文章
- 在VS2012中采用C++中调用DLL中的函数 (4)
这两天因为需要用到VS2012来生成一个DLL代码,但是之前并没有用过DLL相关的内容,从昨天开始尝试调试DLL的文件调用,起初笔者在网络上找到了3片采用VSXXX版本进行调试的例子,相关的内容见本人 ...
- 【windows核心编程】DLL相关(2)
关于DLL的延迟加载 延迟加载DLL,使用的是隐式加载方式,当为exe使用的DLL指定为延迟加载的时候,连接器会将exe的[导入段]中去除该DLL的相关信息,同时在exe中嵌入一个新的[延迟加载段]表 ...
- 【windows核心编程】DLL相关(1)
DLL相关的东西 1.DLL的加载方式 隐式: #pragma comment(lib, "XX.lib"); 编译器去查找名为XX.dll的DLL,除了名字相同,该DLL和该LI ...
- windows应用中调用DLL一步步试验
试验环境: PC:win10 build 10143 IDE: vs2015 RC WinPhone: win10 build 10136 简单界面,点按钮,算加法 一.主程用C++ 1.新建visu ...
- [转载]解析WINDOWS中的DLL文件---经典DLL解读
[转载]解析WINDOWS中的DLL文件---经典DLL解读 在Windows世界中,有无数块活动的大陆,它们都有一个共同的名字——动态链接库.现在就走进这些神奇的活动大陆,找出它们隐藏已久的秘密吧! ...
- Unity中调用DLL库
DLL -- Dynamic Link Library(动态链接库文件),这里以Window平台为例. Unity支持的两种语言生成的DLL库(C++.C#),这里以C#为例,C++网上可以搜索很详细 ...
- 关于QT建立项目中遇到的相关问题的处理办法
关于QT建立项目中遇到的相关问题的处理办法 1.在QTCreater中新建一个空的工程时,第一次运行会抱一个错误,如下: -1: error: LNK1123: 转换到 COFF 期间失败: 文件无效 ...
- 【原创】在VS2012中采用C++中调用DLL中的函数(4)
这两天因为需要用到VS2012来生成一个DLL代码,但是之前并没有用过DLL相关的内容,从昨天开始尝试调试DLL的文件调用,起初笔者在网络上找到了3片采用VSXXX版本进行调试的例子,相关的内容见本人 ...
- 在VS2012中采用C++中调用DLL中的函数(4)
转自:http://www.cnblogs.com/woshitianma/p/3683495.html 这两天因为需要用到VS2012来生成一个DLL代码,但是之前并没有用过DLL相关的内容,从昨天 ...
随机推荐
- IOS-5个可以帮你优化App的优秀网站
也许现在有一款App可以提供所有你需要的,你不需要的,或者你可以想象到的内容.但是,有多少App真的可以不仅满足需求而且还能提供很好的用户体验呢? 相信很多APP并没有这样的能力.有一些APP的设计特 ...
- 彻底解决WP的TextBox中文字过长显示不出来的问题
文字如果过长的话在TextBox中会显示不完全,这个大家都知道了,后来有人做了ExTextblock增强控件,大部分文字是可以显示出来了,不过,在某些情况下还是会有显示不全的情况. 这个时候一个解决方 ...
- python的自省函数, 快速找出BUG的良器
python内置的好多自省函数, 合理使用可快速查找相关提示, 快速找到问题点, 以下开始具体说明 1. dir() 列出对象的所有属性和方法 如: dir(list) 可以列出列表的所有属性 ...
- openResty缓存前移(到达nginx端)
一.openResty的理解 OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库.第三方模块以及大多数的依赖项.用于方便地搭建能够处理超高 ...
- Java SE 8 流库(一)
1. 流的作用 通过使用流,说明想要完成什么任务,而不是说明如何去实现它,将操作的调度留给具体实现去解决: 实例:假如我们想要计算某个属性的平均值,那么我们就可以指定数据源和属性,然后,流库就可以对计 ...
- 判断设备(PC,安Android,iOS)
//判断是不是PC function IsPC() { var userAgentInfo = navigator.userAgent; var Agents = new Array("An ...
- person小项目
所用的IDE为idea,数据库用的是Navicat for MySQL. 好了,开始正题,今天要做person小项目,有以下几个步骤: Navicat for MySQL数据库的构建,以及如何建per ...
- sql_server角色成员身份权限
为便于管理数据库中的权限,SQL Server 提供了若干“角色”,这些角色是用于分组其他主体的安全主体.它们类似于 Microsoft Windows 操作系统中的组.数据库级角色的权限作用域为数据 ...
- opencrud graphql 数据操作指南
opencrud 是社区团队提出,同时prisma框架就是按照这个标准设计的,里面包含了对于graphql 数据 操作的最佳实践,目前还在完善中,但是设计以及指南覆盖的功能还是比较全的,如果用过 pr ...
- fb远程连接服务器调试,碉堡了
开发中经常碰到本地代码没问题,上传到服务器上就有有问题, 这个时候调试变的很麻烦,放个textField自己保存日志这种方式调试的都是. 今天刚学了远程连接服务器,adobe真是牛逼坏了啊. 新增一个 ...